gpt4 book ai didi

python - 使用 shell 管道时 subprocess.run 的返回码

转载 作者:行者123 更新时间:2023-12-04 10:05:06 26 4
gpt4 key购买 nike

我试图理解 subprocess.run 的返回码:

>>> subprocess.run('false | true', shell=True)
CompletedProcess(args='false | true', returncode=0)
>>> subprocess.run(['false', '|', 'true'])
CompletedProcess(args=['false', '|', 'true'], returncode=1)
>>> subprocess.run(['false', '|', 'true'], shell=True)
CompletedProcess(args=['false', '|', 'true'], returncode=1)

看起来像是指定 cmd作为字符串列表还设置 pipefail外壳选项:

$ false | true
$ echo $?
0

$ set -o pipefail
$ false | true
$ echo $?
1

我在 subprocess 模块的文档中找不到有关此的任何信息。我正在使用python 3.6。有谁知道这是如何工作的?

最佳答案

这不符合你的想法:

>>> subprocess.run(['false', '|', 'true'], shell=True)

当您将字符串列表传递给 subprocess.run 时并指定 shell=True ,只有第一项被解释为命令(其余项作为参数提供给 shell)。比较以下输出:
>>> subprocess.run('echo hello world', shell=True)
hello world
CompletedProcess(args='echo hello world', returncode=0)

和:
>>> subprocess.run(['echo', 'hello', 'world'], shell=True)

CompletedProcess(args=['echo', 'hello', 'world'], returncode=0)

和:
>>> subprocess.run(['echo $0 $1', 'hello', 'world'], shell=True)
hello world
CompletedProcess(args=['echo $0 $1', 'hello', 'world'], returncode=0)

所以你所拥有的相当于:
>>> subprocess.run('false', shell=True)

And do you know why the return codes of subprocess.run('false | true', shell=True) and subprocess.run(['false', '|', 'true']) are different?



因为第一次运行 false | true ,这是一个管道。管道的退出代码是管道中最后一个命令的退出代码(在本例中为 true)。如这里所讨论的,第二个调用只是运行 false .

关于python - 使用 shell 管道时 subprocess.run 的返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61624008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com