调用subprocess.Popen在python中时出现"系统找不到指定的文件"
时间:2020-03-05 18:45:32 来源:igfitidea点击:
我正在尝试使用svnmerge.py合并一些文件。在后台,它使用python,当我使用它时,出现错误"系统找不到指定的文件"。同事正在运行相同版本的svnmerge.py和python(2.5.2,特别是r252:60911),没有问题。
我找到了此链接,它描述了我的问题。尝试在那里概述的内容,我确认Python可以找到svn(它在我的路径中):
P:\>python Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> i,k = os.popen4("svn --version") >>> i.close() >>> k.readline() 'svn, version 1.4.2 (r22196)\n'
但是,在查看svnmerge.py代码时,我注意到对于python 2.4及更高版本,它遵循的是不同的执行路径。而不是调用
os.popen4()它使用subprocess.Popen()。尝试重现该错误:
C:\>python Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE, >>> close_fds=False, stderr=subprocess.PIPE) Traceback (most recent call last): File "", line 1, in File "C:\Python25\lib\subprocess.py", line 594, in __init__ errread, errwrite) File "C:\Python25\lib\subprocess.py", line 816, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified >>>
目前,我已经注释掉了2.4及更高版本的特定代码,但是我想找到一个合适的解决方案。
如果不是很明显,我是一个完整的python新手,但是google并没有帮助。有指针吗?
解决方案
回答
这是一个错误,请参见subprocess.Popen文档。或者需要一个" shell = True"选项,或者第一个参数需要一个序列" ['svn","-version"]。现在,Popen
正在寻找一个名为" svn --version"的可执行文件,但找不到。
我不知道为什么它对同事仍然有效,如果他们运行的是相同的操作系统和版本的Python ... FWIW,它在Mac上给我相同的错误消息,并且我提供了两种修复方法。