我想在Python脚本中检查Bash命令的结果。
我正在使用subprocess.check_output()
。
在此之前,我手动检查了shell中两个命令的结果:
user@something:~$ hostname
> something
user@something:~$ command -v apt
> /usr/bin/apt
它按预期工作。现在我正在尝试在Python解释器中运行subprocess.check_output()
函数:
>>> import subprocess
>>> subprocess.check_output(['hostname'], shell=True, stderr=subprocess.STDOUT)
b'something\n'
>>> subprocess.check_output(['command', '-v', 'apt'], shell=True, stderr=subprocess.STDOUT)
b''
如您所见,第一个命令按预期工作,但不是第二个命令(因为它返回一个空字符串)。这是为什么?
修改
我已尝试删除shell=True
,但会返回错误:
>>> subprocess.check_output(['command', '-v', 'apt'], stderr=subprocess.STDOUT)
Traceback (most recent call last):
[...]
FileNotFoundError: [Errno 2] No such file or directory: 'command'
答案 0 :(得分:0)
从参数中删除shell=True
:
>>> subprocess.check_output(['command', '-v', 'apt'], stderr=subprocess.STDOUT)
'/usr/bin/apt\n'
请参阅Actual meaning of 'shell=True' in subprocess。
如果
shell
为True
,建议将args作为字符串传递 而不是一个序列。
这可以确保命令的格式正确,如果您直接在shell中键入命令一样:
>>> subprocess.check_output('command -v apt', shell=True, stderr=subprocess.STDOUT)
'/usr/bin/apt\n'
但是,通常不鼓励使用shell
。