2

Python の subprocess モジュールを使用して別のプログラムを起動しています。プログラムには引数 '-c{0-7}' が必要です。

this_dir = os.path.dirname(os.path.abspath(__file__))
cmd = [os.path.join(this_dir,'foobar'),'-c%d' % channel]
print "Starting process: %s" % str(cmd)
Proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)

C++ プログラムでは、渡された引数をチェックしています。

for (int i = 0; i < argc; i++)
{   
    cerr << i << "   " << argv[i] << endl;
}   
cerr << "" << endl;

Pythonスクリプトを実行したときの出力は次のとおりです。

user@home:~/embedded_pqa/saleae$ ./foobar.py -c3
Starting process: ['/home/user/code/foobar', '-c3']
0   /home/user/code/foobar

明らかなように、引数「-c3」はサブプロセスに渡されていません。何かご意見は?

4

1 に答える 1

12

問題はshell=True. ドキュメントの引用:

Unix では、shell=True の場合: […] args がシーケンスの場合、最初の項目はコマンド文字列を指定し、追加の項目はシェル自体への追加の引数として扱われます。

つまり、次のコマンドを呼び出します。

sh -c /home/user/code/foobar -c3

/home/user/code/foobarシェルはこれをコマンドおよび追加のシェル パラメータとして解釈します-c3

shell=Trueとにかく sh 機能を使用しておらず、すでに分離された引数リストを自分で使用しているため、削除してください。

于 2012-05-07T23:40:08.830 に答える