2

subprocess.Popen()Windows XP x64 マシンで問題を発見したようです。Popen()サブプロセスが作成される代わりに で呼び出された場合Shell=True、エラー

The syntax of the command is incorrect

コマンドプロンプトに出力されます。

この問題は、コマンド ラインで Mercurial を使用しようとしたときに発見されました。「hg resolve」は上記のエラーでクラッシュします。Popen() の問題に絞り込み、問題を再現する 10 行未満のスクリプトを作成しました。この問題は tortoisehg のさまざまな場所にも存在しPopen()ますShell=True

興味深いことに、テスト コードを Shell=False で実行すると、正常に動作します (期待される動作が発生します)。Windows x86 ビルドでコードをテストしましたが、両方Shell=TrueFalse期待どおりに動作します。この特定のマシンには PATH に対するいくつかのカスタマイズがありますが、重大なことは何もありません。

この x64 マシンでこのエラーが発生する原因を知っている人はいますか? マシンは私が仕事に入る前にすでにインストール/セットアップされていたので、何が変更されたのかわかりません。これまでのところ、パラメーターの不適切なエスケープ (または関連するもの) が原因でエラーが発生しているという唯一の考えがありましたが、これがどこで発生するかはわかりません。

情報提供のみを目的としてPopen、問題の可能性があるものを誰かが見つけた場合に備えて、 Mercurial の呼び出しの 1 つを投稿しました。

p = subprocess.Popen(cmd, shell=True, bufsize=-1,
                     close_fds=closefds,
                     stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                     universal_newlines=newlines,
                     env=env)

残念ながら、現在テストコードを投稿することはできません (作業中です) が、入手できたらすぐに更新を投稿します。


更新、テストのコードは以下のとおりです...

import os
import sys
import subprocess

if 'THG_HGTK_SPAWN' in os.environ:
    print 'spawn successful'
    sys.exit(0)

os.environ['THG_HGTK_SPAWN'] = '1'

subprocess.Popen(args={'python', r'test.py'}, shell=True)

print 'spawning...'

sys.exit(0)
4

0 に答える 0