2017-11-25 3 views
1

バッチファイルをバックグラウンドで実行しようとしていますが、バッチファイルにエコーがあると実行を停止します。Python:サブプロセスを実行中バックグラウンドでバッチファイルのポップバックがエコー時に停止する

これは私がPythonで使用しているものです:

subprocess.Popen("test.bat", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

はあまりなかった。これは私の本当のバッチファイルとしてテストのために使用してイム例バッチファイルです:

@ECHO OFF 
ECHO %date% %time%: Test 1 >> test.txt 
ECHO Test 1 
ECHO %date% %time%: Test 2 >> test.txt 
ECHO Test 2 

これを実行すると、text.txtファイルは "Test 2"テキストで埋められないので、ほとんどの場合 "ECHO Test 1"で停止します。 "ECHO Test 1"を削除したりコメントアウトしたりすると動作します。この単純ではない私の実際のバッチファイルでは、エコー後に複数のファイルで試しても止まります。

バッチファイルをエコー後に手動で実行しているときに動作します。 echoを削除して回避策を実行することはできますが、手動でバッチファイルを実行する場合はうまくいきません。

私は間違ったことをやっているのですか、これはどういう仕組みですか?

+0

このバッチファイルは実際のバッチファイルと同じ問題ですか? –

+0

コマンドの出力が必要ですか?あなたはしばらくしてから出力を消費しなければならないので、そうでなければプロセスはブロックします。 –

+0

実際のバッチファイルと同じ問題があります。このスクリプトでは出力は必要ありませんが、手動でバッチファイルを実行すると便利です。それは停止しないプログラムを起動するので、私のansweRを確認したのですが、バックグラウンドで実行する必要があります。 – Meathook

答えて

0

私はバックグラウンドで実行するバッチファイルを望んでいたし、私はそれがこのような出力が働いてほしくなかったとして:

subprocess.Popen("test.bat", shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) 

やPython < 3.3

with open(os.devnull, 'w') as f: 
    subprocess.Popen("test.bat", shell=True, stdout=f, stderr=subprocess.STDOUT) 

をジャンFrançoisFabreは私がおそらく完全なバッファ障害だったと私に助けてくれました。もし私が使っていれば:

subprocess.call("test.bat", shell=True) 

それはうまくいきましたが、バッチファイルにはまだ実行中だったタイムアウトがありましたので、バックグラウンドで実行されていなかったので、DEVNULLはすべての出力をバッファではなく無視して動作させると思います。

関連する問題