使用压缩文件作为shell stdin

时间:2013-11-12 19:38:50

标签: python shell gzip

我正在尝试编写一个可以恢复存储库的简短脚本。 备份脚本生成经过压缩的转储文件。

要应用转储,我需要调用此命令:

svnadmin load < myfile

但由于myfile是一个gzip压缩文件,我需要解压缩它才能使命令生效。

现在我的问题出现了,命令就在上面与

相同
subprocess.call(['svnadmin','load', myfilecontents])

这样我就可以避免将文件解压缩到临时位置。 或者我应该使用

subprocess.call(['svnadmin','load'],stdin=gzip.open(myfile))

1 个答案:

答案 0 :(得分:1)

您无法将stdin指向GzipFile,但您可以自行复制数据

In [5]: cmd=subprocess.Popen(["od", "-cx"], stdin=subprocess.PIPE)
In [6]: data=gzip.open("/tmp/hello.gz")
In [8]: cmd.stdin.write(data.read())
In [9]: cmd.stdin.close()
0000000   h   i  \n
           6968    000a
0000003

或者,您可以使用Popen.communicate()

In [11]: cmd=subprocess.Popen(["od", "-cx"], 
                               stdin=subprocess.PIPE, 
                               stdout=subprocess.PIPE, 
                               stderr=subprocess.PIPE)
In [12]: data=gzip.open("/tmp/hello.gz")
In [13]: cmd.communicate(data.read())
Out[13]: ('0000000   h   i  \\n\n           6968    000a\n0000003\n', '')