8

我正在尝试使用 svnmerge.py 来合并一些文件。在引擎盖下它使用python,当我使用它时出现错误-“系统找不到指定的文件”。工作中的同事正在运行相同版本的 svnmerge.py 和 python(2.5.2,特别是 r252:60911),没有问题。

我找到了这个链接,它描述了我的问题。尝试那里概述的内容,我确认 Python 可以找到 svn(它在我的路径中):

P:\>蟒蛇
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 导入操作系统
>>> i,k = os.popen4("svn --version")
>>> i.close()
>>> k.readline()
'svn,版本 1.4.2 (r22196)\n'

不过,查看 svnmerge.py 代码,我注意到对于 python 2.4 及更高版本,它遵循不同的执行路径。它不是调用 os.popen4(),而是使用 subprocess.Popen()。尝试重现错误:

C:\>蟒蛇
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 键入“help”、“copyright”、“credits”或“license”了解更多信息信息。
>>> 导入子流程
>>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE,
>>> close_fds=False,stderr=subprocess.PIPE)
回溯(最近一次通话最后):
  文件“”,第 1 行,在
  __init__ 中的文件“C:\Python25\lib\subprocess.py”,第 594 行
    读错,写错)
  _execute_child 中的文件“C:\Python25\lib\subprocess.py”,第 816 行
    启动信息)
WindowsError: [错误 2] 系统找不到指定的文件
>>>

目前,我已经注释掉了 2.4 及更高版本的特定代码,但我想找到一个合适的解决方案。

如果不是很明显,我是一个完整的 python 新手,但谷歌没有帮助。任何指针?

4

1 回答 1

15

这是一个错误,请参阅. subprocess.Popen要么需要一个"shell=True" 选项,要么第一个参数需要是一个 sequence ['svn', '--version']。就像现在一样,Popen正在寻找一个名为 "svn --version" 的可执行文件,但它没有找到。

我不知道为什么它会为你的同事工作,如果他们运行相同的操作系统和版本的 Python ...... FWIW 它在 Mac 上给了我相同的错误消息,我给出的两种方法中的任何一种都可以修复它.

于 2008-08-30T20:34:35.877 回答