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=True
でFalse
期待どおりに動作します。この特定のマシンには 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)