我可以运行此代码:
subprocess.call(" ./ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 | gzip - > out2.gz", shell=True)
但我想分两步使用选项shell=False
运行它。我怎样才能做到这一点?我找不到任何简单的例子。
我想我需要将命令分成两部分|
,但我无法理解。
答案 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()
。