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

使用os.popen()时出现Python错误,python,macos,svn,popen,Python,Macos,Svn,Popen,嗯,我有一个在Mac OS X上运行的python脚本。现在我需要修改它,以支持将我的SVN工作副本更新到指定的时间。但是,在学习之后,我发现SVN命令只支持将工作副本更新为指定版本 因此,我编写了一个函数来grub命令中的信息:svnlogxxx,以查找指定时间对应的版本。以下是我的解决方案: process=os.popen('svn log XXX') print process.readline() print process.readline() process.close() 为了

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

因此,我编写了一个函数来grub命令中的信息:svnlogxxx,以查找指定时间对应的版本。以下是我的解决方案:

process=os.popen('svn log XXX')
print process.readline()
print process.readline()
process.close()
为了简化问题,我只打印输出中的前两行。然而,当我执行脚本时,我得到了错误消息:svn:Write error:break pipe

我想我得到这个消息的原因是当我关闭Popen时svn命令一直在执行。因此,出现了错误消息


有人能帮我解决这个问题吗?或者给我一个替代方案来实现这个目标。谢谢

每当我使用
svnlog | 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

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

如果您最终执行以下操作,是否仍会发生错误:

print process.read()

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

是否考虑改用pysvn?另外,
os.popen
已被
subprocess
替换。在Python中,read()读取所有输出,直到关闭文件句柄。如果子进程写入一些字节,等待两个小时,然后再次写入一些字节并存在,则执行read()操作的父进程将一直等待。