python subrpocess.Popen 与管道和标准输出重定向到命令中的文件不起作用

问题描述 投票:0回答:1

问题来了

让我们考虑一个文件:

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)

但它也不起作用,所以我对如何继续能够通过管道并重定向到文件有点无能为力。

python scripting subprocess
1个回答
0
投票

这没有任何意义:

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)

© www.soinside.com 2019 - 2024. All rights reserved.