subprocess.Popen shell = True to shell = False

时间:2017-01-04 18:37:16

标签: python shell subprocess

我知道对子进程使用shell = True是不好的做法。但是对于这行代码,我不确定如何使用shell = False执行它

subprocess.Popen('candump -tA can0 can1 >> %s' %(file_name), shell=True)

我想要运行的命令是:

candump -tA can0 can1 >> file_name

file_name/path/to/file.log

的位置

2 个答案:

答案 0 :(得分:8)

您不能像使用shell=True一样直接在命令中使用滚边,但它很容易适应:

with open(file_name, 'ab') as outf:
    proc = subprocess.Popen(['candump', '-tA', 'can0', 'can1'], stdout=outf)

在Python级别打开文件以进行二进制追加,并将其作为子进程的stdout传递。

答案 1 :(得分:0)

只有shell模式支持内联管道操作符,因此您需要手动执行重定向。此外,您需要将命令行拆分为单独的参数,您可以手动执行或让shlex模块为您执行操作:

subprocess.Popen(shlex.split('candump -tA can0 can1'), stdout=open(file_name, 'ab'))