用于cmd的Subprocess.call

时间:2014-09-17 16:07:42

标签: python

我有以下命令在shell中运行:

$ pv itunes20140910.tbz | sudo tar xpj -C /tmp

然而,当我尝试在python中执行它时,它不起作用:

>>> import subprocess
>>> import shlex
>>> cmd=shlex.split('pv itunes20140910.tbz | sudo tar xpj -C /tmp')
>>> subprocess.call(cmd)
pv: invalid option -- 'C'
Try `pv --help' for more information.
1

我在这里做错了什么,以及在python中运行的正确命令是什么?

2 个答案:

答案 0 :(得分:1)

上面的答案并没有我所寻找的结果(进度条)的净效果,尽管命令会运行没有错误。这对我有用:

>>> import shlex, subprocess
>>> p1 = subprocess.Popen(shlex.split('pv /tmp/itunes20140910.tbz'), stdout=subprocess.PIPE) #Set up the echo command and direct the output to a pipe
>>> subprocess.Popen(shlex.split('sudo tar xpj -C /tmp'), stdin=p1.stdout) #send p1's output to p2

答案 1 :(得分:0)

使用shell=True参数。否则|无法解释。

subprocess.call('pv itunes20140910.tbz | sudo tar xpj -C /tmp', shell=True)