2016-05-11 4 views
1

は、私は次のようにフォルダをビュンされるバッチファイル(zip.bat)を持っています。次のように今、Pythonスクリプトからこのバッチを呼び出しています:Pythonから呼び出されたときにバッチファイルが終了するのを待つ方法は?</p> <pre><code>for /d %%X in (D:/sample/target/bin) do "c:Program Files7-Zip7z.exe" a -mx "%%X.zip" "%%X*" </code></pre> <p>は、バッチファイルは、フォルダのbinを圧縮し、正常に動作します:

import subprocess as sp 
import sys 
start_zip_batch = sp.Popen(['D:/zip.bat'],stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE, shell = True) 
start_zip_batch.wait() 

ので、スクリプトを実行させる際に、今ではbin.zipフォルダを作成しますが、その中に0バイトを示しておくと、しばらくして、それが応答を停止私は手動でそれを閉じる必要があります。 binフォルダは約403 MBです。ですから、私は、zip.batをpythonから呼び出すことで、zipフォルダを作成してからきちんと閉じられるようにしてください。

+0

使用 'start_zip_batch.communicate()'充填ブロッキングから 'stdout'と' stderr'パイプを防止します。しかし、なぜあなたは入力と出力をパイプに設定していますか?標準入出力を必要としない場合は、標準ストリームをPython 3では 'subprocess.DEVNULL'に、Python 2では' fnull = open(os.devnull、 'r +') 'に設定することができます。 – eryksun

答えて

0

完了を待ついくつかのサブプロセスメソッドがあります。

check_callは、コマンドの戻りコードに基づいてクリーンアップまたはレポートを実行する場合に便利です。

subprocess.check_call(引数、*、STDIN =なし、STDOUT =なし、標準エラー出力=なし、 シェル= False)が引数付き

Runコマンド。コマンドが完了するのを待ちます。リターンコードが0の場合はリターンを返し、それ以外の場合はCalledProcessErrorを発生させます。 CalledProcessErrorオブジェクトの戻りコードは、 returncode属性になります。

The Docs

関連する問題

 関連する問題