Pythonでsubprocess.Popenを呼び出すと「システムは指定されたファイルを見つけることができません」

StackOverflow https://stackoverflow.com/questions/36324

  •  09-06-2019
  •  | 
  •  

質問

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」という名前の実行可能ファイルを探していますが、見つかりません。

ただし、同僚が同じ OS と同じバージョンの Python を実行している場合、なぜそれが機能するのかわかりません。FWIW、Macでも同じエラーメッセージが表示され、私が指定した2つの方法のいずれかでそれが修正されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top