我用subprocess
的{{1}}函数两种方式,发现结果不同,我不知道为什么。
第一种方式:
check_output()
第二种方式:
from subprocess import check_output as qc
output = qc(['exit', '1'], shell=True)
错误:
from subprocess import check_output as qc
output = qc(['exit 1'], shell=True)
第二种方式是正确的,但第一种方式为什么不对?
答案 0 :(得分:1)
所有调用都需要args ,而应该是字符串或序列 程序参数。通常提供一系列论证 首选,因为它允许模块处理任何所需的 转义和引用参数(例如,允许文件中的空格 名)。 如果传递单个字符串,则任何一个shell都必须为True(请参阅 或者字符串必须简单地命名要执行的程序 没有指定任何参数。
在每种情况下你实际做的是:
您传递了一系列参数:['exit', '1']
。 Sequence等同于shell命令exit 1
。参数由空格分隔,没有引用来改变分离过程。
您传递一系列参数:['exit 1']
,其长度为1.这相当于shell命令"exit 1"
。你的第一个(也是唯一的)参数中有空格,类似于用引号括起来。
您可以验证,两个命令的退出代码是不同的,因此您的Python脚本输出是不同的。