使用os.popen()时的Python错误
我在Mac OS X上有一个运行的Python脚本。现在我需要修改它,以便可以把我的SVN工作副本更新到指定的时间。不过,我发现SVN命令只支持将工作副本更新到指定的版本。
于是,我写了一个函数,从命令svn log XXX中获取信息,以找到与指定时间对应的版本。以下是我的解决方案:
process=os.popen('svn log XXX')
print process.readline()
print process.readline()
process.close()
为了简化问题,我只打印输出的前两行。但是,当我执行这个脚本时,出现了错误信息:svn: Write error: Broken pipe
我认为出现这个错误的原因是,当我关闭Popen时,svn命令仍在继续执行,所以才会出现这个错误信息。
有没有人能帮我解决这个问题?或者给我一个替代方案来实现这个目标。谢谢!
2 个回答
1
请使用pysvn,这个工具非常简单好用。或者你也可以用subprocess。
如果你最后这样做,错误还会出现吗:
print process.read()
如果你使用os.popen或者subprocess,最好调用wait()。
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