8

svnmerge.py を使用していくつかのファイルをマージしようとしています。内部では python を使用しており、使用するとエラーが発生します - 「システムは指定されたファイルを見つけることができません」。職場の同僚は、同じバージョンの svnmerge.py と python (2.5.2、具体的には r252:60911) を問題なく実行しています。

私の問題を説明するこのリンクを見つけました。そこで概説されていることを試して、Pythonがsvnを見つけることができることを確認しました(それは私のパスにあります):

P:\>パイソン
Python 2.5.2 (r252:60911、2008 年 2 月 21 日、13:11:45) [MSC v.1310 32 ビット (Intel)] (win32)
詳細については、「ヘルプ」、「著作権」、「クレジット」、または「ライセンス」と入力してください。
>>> OSをインポート
>>> 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、2008 年 2 月 21 日、13:11:45) [MSC v.1310 32 ビット (Intel)] win32情報。
>>> サブプロセスのインポート
>>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE,
>>> close_fds=False、stderr=subprocess.PIPE)
トレースバック (最新の呼び出しが最後):
  ファイル ""、1 行目、
  ファイル「C:\Python25\lib\subprocess.py」、594 行目、__init__ 内
    エラー、エラー書き込み)
  ファイル「C:\Python25\lib\subprocess.py」、816 行目、_execute_child 内
    起動情報)
WindowsError: [エラー 2] 指定されたファイルが見つかりません
>>>

今のところ、2.4 以降固有のコードはコメントアウトしていますが、適切な解決策を見つけたいと考えています。

明らかでない場合、私は完全な Python 初心者ですが、Google は役に立ちませんでした。ポインタはありますか?

4

1 に答える 1

15

これはバグです。 のドキュメントをsubprocess.Popen参照してください。" オプションが必要"shell=Trueか、最初の引数が sequence である必要があります['svn', '--version']。現在のようにPopen、文字どおり "svn --version" という名前の実行可能ファイルを探していますが、見つかりません。

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

于 2008-08-30T20:34:35.877 に答える