3

Python でサブプロセスを生成または Popen し、その出力をリアルタイムで処理するにはどうすればよいですか? サブプロセスは、他のシステム イベントに応じて出力をランダムに出力します。

この「例」がハングします。

$./print.sh | ./echo.pyハングします。

print.sh

#!/bin/bash

while [ 1 ]; do
echo 'A'
sleep 1
done

echo.py

#!/usr/bin/python
import sys

for line in sys.stdin:
  print line
4

2 に答える 2

2

ハングしません。echo/シェルは、パイプへの書き込みであるため、ライン バッファ モードではなくブロック バッファ モードで I/O を実行することを決定します。十分に待つかsleep 1、シェル スクリプトから を削除すると、からの出力が表示されることがわかりますA

考えられる解決策は 2 つあります。

  1. サブプロセスのプログラムを変更して、Python プログラムが処理するのに十分な出力が書き込まれたときにバッファーをフラッシュするようにします。
  2. パイプの代わりに疑似端末 (PTY) を使用します。pexpect複雑さのほとんどを隠します。ただし、それは のドロップイン代替品でsubprocessはありません。
于 2012-09-20T10:49:05.330 に答える
0

このコーディング スニペットが機能するかどうかを確認してください。

猫 ech.sh

#!/bin/bash

while [ 1 ]; do
echo -n 'A'
sleep 1
done

猫 in_read.py

#!/usr/bin/python
import sys
import os

while True:
  print os.read(0,1)
于 2012-09-20T11:37:46.207 に答える