首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子进程返回空字符串。

子进程返回空字符串。
EN

Stack Overflow用户
提问于 2017-10-17 08:38:48
回答 1查看 1.6K关注 0票数 2

我想在Python脚本中检查Bash命令的结果。我在用subprocess.check_output()

在此之前,我手动检查了shell中两个命令的结果:

代码语言:javascript
运行
复制
user@something:~$ hostname
> something

user@something:~$ command -v apt
> /usr/bin/apt

它如预期的那样工作。现在,我试图在Python解释器中运行subprocess.check_output()函数:

代码语言:javascript
运行
复制
>>> 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,它返回一个错误:

代码语言:javascript
运行
复制
>>> subprocess.check_output(['command', '-v', 'apt'], stderr=subprocess.STDOUT)
Traceback (most recent call last):
[...]
FileNotFoundError: [Errno 2] No such file or directory: 'command'
EN

回答 1

Stack Overflow用户

发布于 2017-10-17 08:42:38

从参数中删除shell=True

代码语言:javascript
运行
复制
>>> subprocess.check_output(['command', '-v', 'apt'], stderr=subprocess.STDOUT) 
'/usr/bin/apt\n'

Actual meaning of 'shell=True' in subprocess

如果shellTrue,则建议将args作为字符串而不是序列传递。

这可以确保命令的格式正确,就像在shell中直接键入命令一样:

代码语言:javascript
运行
复制
>>> subprocess.check_output('command -v apt', shell=True, stderr=subprocess.STDOUT)
'/usr/bin/apt\n'

但是,通常不鼓励使用shell

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46785924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档