2017-08-11 17 views
-2

subprocess.callを呼び出すとcmd.exeがオフになるので、実行エラーを示す戻り値 '1'だけが返されます。説明するためのスクリーンショットのみです。Pythonのsubprocess.callに関する不思議

勝ちcmdの下で、それはうまく動作します。なぜそれがサブプロセスコールを破るのですか? Pythonで

Year: 979 
Year: 980 
Year: 981 
Year: 982 
Year: 983 
Year: 984 
Year: 985 
Year: 986 
Year: 987 
Year: 988 
Year: 989 
SPINUP: residual trend = -0.000069 
SPINUP: number of years = 990 
H:\calibration\bgcclimb>pointbgc.exe .\ini\spinup\t59_13_79_29_11_80_8.ini 

使用subproceess.call:戻り値 '1' ではなく、 '0'

subprocess.call([r'H:\calibration\bgcclimb\pointbgc.exe',r'.\ini\spinup\t59_13_79_29_11_80_8.ini']) 
Out[7]: 1 

使用subprocess.Popenチェック標準エラー出力:

process = subprocess.Popen([r'H:\calibration\bgcclimb\pointbgc.exe',r'.\ini\spinup\t59_13_79_29_11_80_8.ini'], shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
out, err = process.communicate() 
errcode = process.returncode 

err 
Out[3]: b"Can't open .\\ini\\spinup\\t59_13_79_29_11_80_8.ini for ascii read ... Exiting\r\nError opening init file, pointbgc.c\r\n" 
+0

stdoutとstderrまたは呼び出しをキャプチャすると、何が間違っているかが分かります。 –

+0

stderrヒント: 'b" ASCII読み込みのために\\ ini \\ spinup \\ t59_13_79_29_11_80_8.iniを開くことはできません... \ r \ nエラー開始用ファイル、pointbgc.c \ r \ n "' @ ers81239 – Cobin

+1

テキストの*絵*を投稿しないでください。テキスト自体を投稿してください。 – larsks

答えて

0

問題が関係していますあなたが使用している相対パスで.iniファイルへの完全なパスを指定します。

私は専門家ではありませんが、このようなものです:subprocess.callを呼び出すと、OSは新しい環境でそれを実行しています。 shell = Trueを渡さないと、実際には完全なシェルではありません。したがって、新しい環境では、現在の作業ディレクトリが異なるか、設定されていないので、相対パスを参照することはできません。

関連する問題