2008-08-30 1 views
5

でsubprocess.Popenを呼び出すときに、私はいくつかのファイルをマージするsvnmerge.pyを使用しようとしている「システムは指定されたファイルを見つけることができません」。フードの下では、Pythonを使用しています。使用すると、「指定されたファイルが見つかりません」というエラーが表示されます。仕事中の同僚は、同じバージョンのsvnmerge.pyとPython(2.5.2、特にr252:60911)を問題なく実行しています。のpython

私は私の問題を説明している、this linkを発見しました。そこに概説されたものをしようと、私はPythonはSVN(それは私のパスにあります)見つけることができる確認:

svnmerge.pyコードを見てみると
 
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' 

を、しかし、私はそれが別の実行を次れた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は役立っていません。すべてのポインタ?

答えて

13

それはバグです、documentation of subprocess.Popenを参照してください。 ""shell=True"オプションが必要であるか、最初の引数がシーケンス['svn', '--version']である必要があります。今のところPopenは、文字通り "svn --version"という名前の実行可能ファイルを探しています。

それはしかし、あなたの同僚のために働くだろう、なぜ彼らは、Pythonの同じOSとバージョンを実行している場合

私は、知らない... FWIW、それは私のMac上で同じエラーメッセージを与え、次の2つの方法のいずれかのIそれを修正した。