子进程的 Python 循环在随机索引处终止

问题描述 投票:0回答:1

我一直在做一个循环来从命令列表中调用子进程:

commands=[
    'do a',
    'do b']
for cmd in commands:
    process = subprocess.run(cmd, shell=True, check=True)
    if (process.returncode != 0): 
        raise RuntimeError(f'Lustre configuration failed: {cmd} returned non-zero exit status {process.returncode}\n STDERR: {process.stderr.decode("utf-8")}')

它让我知道我的脚本是否失败以及失败的原因

当我直接在子进程中使用“;”.join(commands)启动所有命令时,它工作正常,但现在我在循环中执行它,它会退出或随机杀死列表中的进程

这种行为背后有逻辑吗? subprocess.run 应该是同步的,所以我不应该得到这种错误

PS:更准确的命令是通过 sgdisk / partprobe / mkfs 和 mount 挂载文件系统

我尝试一起运行所有命令,并用“;”将它们连接起来或者 ” && ” 使用子进程的其他阻塞功能 没有任何结果

python loops subprocess mount lustre
1个回答
0
投票

参见子流程文档

您正在使用

check=True
,如果进程返回非零退出代码,将导致您不处理的 python 异常。

如果您自己使用此块进行检查

if (process.returncode != 0):

没必要同时使用

check=True

至于为什么命令因非零代码而失败,需要更多信息,如果它返回非零退出,您应该能够从

process.stderr
中提取这些信息。

© www.soinside.com 2019 - 2024. All rights reserved.