subprocess如何在shell = False时使用命令

时间:2016-10-25 14:25:07

标签: python shell subprocess

我可以运行此代码:

subprocess.call(" ./ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 | gzip - > out2.gz", shell=True)

但我想分两步使用选项shell=False运行它。我怎样才能做到这一点?我找不到任何简单的例子。

我想我需要将命令分成两部分|,但我无法理解。

1 个答案:

答案 0 :(得分:2)

我这样做:

import gzip
import subprocess
import sys

command = [
    sys.executable,
    'ApiStreamingClient.py',
    '-w', 'flow-index',
    '-n', 'admin',
    '-p', 'admin',
    'localhost',
    '1477389500000000000',
    '1477389900000000000',
    ]
text = subprocess.check_output(command)
with gzip.open('out2.gz', 'w', 6) as outfile:
    outfile.write(text)

请注意,如果没有shell,您只能将Python脚本作为可执行文件调用 - 您需要直接调用python并将脚本作为参数传递。但这很容易。

如果你想以流媒体方式做所有事情(例如,如果text占用太多内存),你可以使用stdout=subprocess.PIPE获取一个句柄来读取,并将其传递给{ {1}}而不是一次性写出shutil.copyfileobj()