以下是示例代码:
def visit_Expr(self, node):
# stand-alone call to a single name is to be removed
if isinstance(node.value, ast.Call) and isinstance(node.value.func, ast.Name):
return None
return node
获取dh -h值list1的错误。
from subprocess import check_output
list1 = ['df', 'df -h']
for x in list1:
output = check_output([x])
在python2.7中读取linux命令输出的最佳方法是什么
答案 0 :(得分:2)
您应该提供check_output
个参数作为列表。
这有效:
from subprocess import check_output
list1 = ['df', 'df -h']
for x in list1:
output = check_output(x.split())
答案 1 :(得分:0)
我推荐kennethreitz编写的delegator
和他的软件包https://github.com/kennethreitz/delegator.py,您可以这样做,API和输出都更清晰:
import delegator
cmds = ['df', 'df -h']
for cmd in cmds:
p = delegator.run(cmd)
print(p.out)
答案 2 :(得分:0)
对于传递cmd
和args
的方式,这种情况有几种选择:
# a list broken into individual parts, can be passed with `shell=False
['cmd', 'arg1', 'arg2', ... ]
# a string with just a `cmd`, can be passed with `shell=False`
'cmd`
# a string with a `cmd` and `args`
# can only be passed to subprocess functions with `shell=True`
'cmd arg1 arg2 ...'
只是跟进marii的回答。 python.org上的subprocess docs有关于为什么的更多信息,您可能想要选择其中一个选项。
所有呼叫都需要
args
,应该是字符串或序列 程序参数。通常提供一系列论证 首选,因为它允许模块处理任何所需的 转义和引用参数(例如,允许文件中的空格 名称)即可。如果传递单个字符串,则shell
必须为True
(请参阅 或者字符串必须简单地命名要执行的程序 没有指定任何参数。
(已添加摘要)
虽然添加shell=True
可以做到这一点,但建议避免,因为将'df -h'
更改为['df', '-h']
并不是很困难,并且只是进入的良好习惯,如果你真的需要使用shell。正如文档也添加,对红色背景一样,
警告即可。 执行包含来自的unsanitized输入的shell命令 不受信任的来源使程序容易受到 shell注入,a 严重的安全漏洞,可导致任意命令执行。 出于这个原因,强烈建议不要使用
构造的情况shell=True
命令字符串由外部输入