我正在尝试编写一个简短的脚本来恢复存储库。备份脚本生成已 gzip 压缩的转储文件。
要应用转储,我需要调用以下命令:
svnadmin load < myfile
但由于 myfile 是一个 gzip 文件,我需要解压缩它才能使命令起作用。
现在我的问题是,上面的命令是否与
subprocess.call(['svnadmin','load', myfilecontents])
这样,我将避免将文件解压缩到临时位置的需要。还是我应该使用
subprocess.call(['svnadmin','load'],stdin=gzip.open(myfile))
您不能将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 \nn 6968 000an0000003n', '')