使用os.popen()时出现Python错误

时间:2011-08-17 06:52:21

标签: python macos svn popen

好吧,我在Mac OS X上运行了一个python脚本。现在我需要修改它以支持将我的SVN工作副本更新到指定的时间。但是,在学习之后我发现SVN命令仅支持将工作副本更新为指定版本。

所以我编写了一个函数来grub命令信息:svn log XXX,找到指定时间的相应版本。这是我的解决方案:

process=os.popen('svn log XXX')
print process.readline()
print process.readline()
process.close()

为了简化问题,我只打印输出中的前两行。但是,当我执行脚本时,我收到错误消息:svn:写入错误:管道损坏

我认为我得到消息的原因是当我关闭Popen时svn命令继续执行。因此出现错误消息。

有没有人可以帮我解决问题?或者给我一个替代解决方案来实现目标。谢谢!

2 个答案:

答案 0 :(得分:1)

每当我使用svn log | head时,我都会收到该错误,它不是特定于Python的。尝试类似:

from subprocess import PIPE, Popen

process = Popen('svn log XXX', stdout=PIPE, stderr=PIPE)
print process.stdout.readline()
print process.stdout.readline()

取消stderr。你也可以使用

stdout, stderr = Popen('svn log XXX | head -n2', stdout=PIPE, stderr=PIPE, shell=True).communicate()
print stdout

答案 1 :(得分:1)

请使用pysvn。它很容易使用。或者使用子流程。

如果你最终做错,你的错误是否仍然存在:

print process.read()

如果使用os.popen或subprocess,最好调用wait()。