1

私のPythonプログラムは、次を使用してWindowsでスクリプトを呼び出していますcheck_call

import subprocess

subprocess.check_call(['my_script.bat', 'foo=bar'])

my_script.bat1つのコマンドライン引数()を受け取ることを期待していますfoo=barが、代わりに2つの(foobar)を受け取ります。つまり、等号が空白に変換されているようです。Linuxではすべてが期待どおりに機能します。

my_script等号を含む単一の引数が表示されるように、Windowsでこの文字列をフォーマットする正しい方法は何ですか?

my_script.bat

echo %1

私の実際のアプリケーションでは、my_script.batですscons.bat

4

1 に答える 1

1

このケースは、python2.7を使用して、Windows 7で問題なくテストされます

my_script.py

import sys
print sys.argv

パイソンシェル

>>> import subprocess
>>> subprocess.check_call('python', 'my_script.py', 'arg1', 'foo=bar')
['myscript.py', 'arg1', 'foo=bar']
0

「my_script」が着信引数をどのように処理しているかを確認することをお勧めします。

アップデート

特にWindowsバッチファイルで作業していることを反映するように質問を更新したので、ここに解決策があります:http://geoffair.net/ms/batch.htm

注: セミコロンの場合、';' または等号 (=) がバッチ ファイルへのコマンド ライン引数として使用されると、空白として扱われます。たとえば、次の test.bat バッチ ファイルでは、

等号は、空白に置き換えられる特殊文字です。引用する必要があります:

subprocess.check_call(['my_script.bat', '"foo=bar"'])
于 2012-05-02T19:28:15.927 に答える