Python重定向子流程.Popen

2024-10-08 18:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用一个使用python的subprocess.Popen的bash命令。 我的bash命令看起来像:

$ gunzip -c /my/dir/file1.gz /my/dir/file2.gz | gsplit -l 500000 --numerical-suffixes=1 --suffix-length=3 --additional-suffix=.split - /my/dir/output/file_

它获取压缩文件,解压缩,合并内容,将内容拆分为输出文件。我可以在Python中这样做:

^{pr2}$

然后我可以检查输出:

$ ls /my/dir/output
file_001.split
file_002.split
file_003.split

现在我想使用gsplit的--filter参数,它允许将结果通过管道传输到另一个命令。在这里,我选择了gzip作为压缩输出。Bash命令如下所示:

$ gunzip -c /my/dir/file1.gz /my/dir/file2.gz | gsplit -l 500000 --numerical-suffixes=1 --suffix-length=3 --additional-suffix=.split --filter='gzip > $FILE.gz' - /my/dir/output/file_

这个命令有效。在

现在把它放到python代码中:

from __future__ import print_function
import subprocess
dir = "/my/dir"
files = ["file1.gz", "file2.gz"]

cmd1 = "gunzip -c {}".format(" ".join([dir+files[0], dir+files[1]]))
cmd2 = "{} -l {} --numeric-suffixes={} --suffix-length={} --additional-suffix={}  --filter={} - {}"\
        .format("gsplit", 500000, 1, 3, ".split", "'gzip > $FILE.gz'"
                , "/my/dir/output/file_")

proc1 = subprocess.Popen(str(cmd1).split(), stdout=subprocess.PIPE)
proc2 = subprocess.Popen(str(cmd2).split(), stdin=proc1.stdout, stdout=subprocess.PIPE)

proc1.stdout.close()
proc2.wait()
print("result:", proc2.returncode)

唉,我得到了这个错误:

/usr/local/bin/gsplit: invalid option -- 'f'

Try '/usr/local/bin/gsplit --help' for more information.

gunzip: error writing to output: Broken pipe

gunzip: /my/dir/file1.gz: uncompress failed

gunzip: error writing to output: Broken pipe

gunzip: /my/dir/file12.gz: uncompress failed

我认为这与gzip > $FILE.gz中的重定向符号有关。在

怎么回事,怎么解决这个问题?在


Tags: 命令outputmydirstdoutsuffixfile1file

热门问题