python:子进程参数拆分字符串错误

时间:2015-03-29 20:30:06

标签: python string subprocess

我尝试通过python自动获取pacman上的一些依赖项。 我想在shell中发出什么(并从中得到输出)是:

pacman -Si [a_package] | grep Conflicts | awk -F: '{print $2}'

所以这是我的python代码:

getconflicts1 = "pacman -Si"
getconflicts2 = "| grep Conflicts | awk -F: '{print $2}'"
pkgs = # an example package list
for x in range (1,2):
    getconflicts = getconflicts1 + pkgs[x] + getconflicts2
    process2 = subprocess.Popen(getconflicts.split(), stdout=subprocess.PIPE)
    conflicts = process2.communicate()[0]
    print(conflicts)

然而,当我使用python程序时,pacman说“无效选项-F”,而在shell中发出命令则直接起作用。

此:

print(getconflicts.split())

给了我:

['pacman', '-Si', 'frameworkintegration', '|', 'grep', 'Conflicts', '|', 'awk', '-F:', "'{print", "$2}'"]

我对python中的python和子进程有点新手,所以你有没有提示如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

我想我之前遇到过这种情况,除非你使用shell = True,否则你不能在那里使用管道。我认为原因是子进程没有使用shell来启动命令,除非你告诉它,所以|只是作为你正在调用的可执行文件的另一个参数传递。