问题来了
让我们考虑一个文件:
printf 'this is \\n difficult' \>test
现在我想使用 python 和以下 bash 命令:
grep 'diff' test |gzip \>test2.gz
我尝试了以下代码,但不起作用:
import subprocess
command = \['grep', 'diff', 'test', '|', 'gzip', '\>' 'test2.gz'\]
proc = subprocess.Popen(
command,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
encoding='utf8', shell=True)
然后我尝试使用以下方法将输出重定向到文件:
import subprocess
command = \['grep', 'diff', 'test', '|', 'gzip'\]
test2 = open('test2.gz', 'w')
proc = subprocess.Popen(
command,
stdin=subprocess.PIPE,
stdout=test2,
stderr=subprocess.STDOUT,
encoding='utf8', shell=True)
但它也不起作用,所以我对如何继续能够通过管道并重定向到文件有点无能为力。
这没有任何意义:
command = ['grep', 'diff', 'test', '|', 'gzip']
这是尝试使用参数
grep
运行 ["diff", "test", "|", "gzip"]
命令——这不是您想要的——但是使用 shell=True
时,您需要传入一个字符串而不是列表。
如果您想使用 io 重定向等 shell 脚本功能,则需要运行 shell 脚本。
import subprocess
command = "grep 'diff' test | gzip"
with open('test2.gz', 'w') as test2:
proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=test2, stderr=subprocess.STDOUT, encoding='utf8', shell=True)