0

この質問はこれと非常によく似ています。私のコンソールアプリからの出力を読みたいです。アプリは終了せず、stdinからの入力も受け取りません。

rix0rrrのソリューションを変更してアプリを実行してから彼のソリューションを実行すると、read(1)が返されないため、Pythonがハングします。アプリの初期出力は「サーバーの起動です。\n」です。私のアプリが彼のソリューションの動作を妨げている可能性のあるプロパティを推測できますか?私の変更の範囲は、私がこれを変更したことです:

p = Popen( ["cmd.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"^C:\\.*>", re.M)

これに:

p = Popen( ["c:\\path\\to\\my\\app\\app.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"Starting", re.M)
import pdb;pdb.set_trace()

また、すぐに返されるアプリのテストバージョンを作成し、その場合はアプリからの出力がread()によって返されることを確認しました。彼の元の、変更されていない例も、予想どおり、ハングしません。

また、Piotrが彼の回答でリンクしているActiveStateコードを試しました。その場合も、プロセスから出力は返されません。

これはVista上のPython2.4.4です。

4

1 に答える 1

1

最初に確認するのは、app.exe のバッファリングです。「Starting the server.\n」がバッファリングされていてパイプに到達しない場合、リーダー側でできることは何もありません。

ので、fflush(stdout)後に追加してみてくださいprintf("Starting the server.\n")

于 2009-11-06T06:26:21.097 に答える