python subprocess dpkg:我在bash中运行的东西出错了

时间:2014-12-25 00:29:15

标签: python linux bash

我正在尝试使用子进程模拟以下bash命令:

dpkg --get-selections > a_file.txt

我一直在尝试使用Python解释器:

1刚刚运行dpkg

>>> args = ['dpkg','--get-selections']
>>> subprocess.call(args, shell=True)
dpkg: error: need an action option

2将子流程分配给变量

>>> x = subprocess.call(args, shell=True)
dpkg: error: need an action option

3将子进程输出重定向到文件

>>> args = ['dpkg','--get-selections', '>', 'a_file.txt']
>>> subprocess.call(args, shell=True)
dpkg: error: need an action option

4重定向作为数组

中的一个参数包含在内
>>> args = ['dpkg','--get-selections', '> a_file.txt']
>>> subprocess.call(args, shell=True)
dpkg: error: need an action option

5,不使用shell=True

>>> x = subprocess.call(args)
dpkg: no packages found matching > a_file.txt
>>> 

关于在子进程中使用它,dpkg: error: need an action option似乎无法得到任何具体内容。

bash命令运行正常,但语法似乎也没有任何问题。

欢呼声

1 个答案:

答案 0 :(得分:2)

使用stdout的{​​{1}}参数。此外,您通常不希望call() - 在大多数情况下,您不需要在shell中执行它而不使用它会更安全(还记得ShellShock吗?)!

shell=True

如果您从 dpkg 本身收到错误,则表示您传递的错误参数。这与子流程无关。