1

サブプロセスが特定のバイト数または行数を出力するまで、Python でサブプロセスを実行したいと思います。この時点で、私はそれを終了したいと思います。これはサブプロセスで可能ですか?

これが私がこれまでに持っているものです:

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#kill after reaching n bytes of output, proc.terminate()
out, errors = proc.communicate()

ありがとう!

4

1 に答える 1

0

これを行うためのかなり簡単な方法の1つは、出力を、バイト/行のカウントを行うプログラムにリダイレクトすることです。たとえば、次のようになります。

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
head = subprocess.Popen(['head', '-n', '20'], stdin=proc.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.stdout.close()
out, errors = head.communicate()

moreこの方法がどれほど移植性があるかはわかりません。Linuxでしかテストできませんでしたが、Windowsでは同様の動作にコマンドを使用できるはずです。

終了時にSIGPIPEを受け取るには、閉じるproc.stdout必要があります。prochead

于 2012-07-06T22:11:14.527 に答える