2017-01-17 14 views
1

私はPython 2.7でサブプロセスモジュールを使用しています。私のコードは次のようになりますPython 2.7 Get Command stdout/stderr

cmd = 'unrar l -p%s %s' % (pwd, filename) 
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
(output, err) = proc.communicate() 

このコードはWindows 7/10でうまく動作しますが、Ubuntu 16.04では動作しません。私はデバッグし、変数errが空であることを見ました。これは、Windows上でエラーメッセージが含まれています。変数出力には、コマンドのヘルプメッセージが含まれています。コマンドがオプションなしで実行されたようです。

これがコマンドを実行してstdout/stderr出力を得る正しい方法でない場合、正しい方法は何ですか?

+0

'pwd'または' filename'にスペースが含まれていると失敗します。 shlex.split()または単に 'cmd = [" unrar "、" l "、" -p "、pwd、filename]'を考え、 'shell = True'をドロップします。 –

答えて

0

Jean-FrançoisFabreから提供されたヒントのおかげで、私はshell=Trueパラメータを削除してプログラムがうまく動作します。私はsubprocess.Popen()のドキュメントを読んで、なぜWindows上で私がshell=Trueを必要としているかを理解する必要があると思いますが、Ubuntuではそうはしませんが、今のところ私は満足しています。