0

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

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

svnadmin load < myfile

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

现在我的问题来了,上面的命令是否与

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

这样,我就无需将文件解压缩到临时位置。还是我应该使用

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

1 回答 1

1

您不能指向stdina 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', '')
于 2013-11-12T20:02:33.083 回答