我正在尝试编写一个可以恢复存储库的简短脚本。 备份脚本生成经过压缩的转储文件。
要应用转储,我需要调用此命令:
svnadmin load < myfile
但由于myfile是一个gzip压缩文件,我需要解压缩它才能使命令生效。
现在我的问题出现了,命令就在上面与
相同subprocess.call(['svnadmin','load', myfilecontents])
这样我就可以避免将文件解压缩到临时位置。 或者我应该使用
subprocess.call(['svnadmin','load'],stdin=gzip.open(myfile))
答案 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', '')