0

dd コマンド (http req 1) を実行する Python サービス (私は bottle と gunicorn を使用しています) を呼び出す必要があります。また、別の呼び出し (http req 2) でいつでもプロセスを終了できる必要があります。

A)私が次のようなことをした場合:

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out = p.stdout.read().strip()

http req 2 は、http req 1 が終了するまで待機します (したがって、出力を読み取ると同時呼び出しがブロックされます)

B)出力をファイルに書き込む場合、http req 1 は他のリクエストをブロックしませんが、コマンドがバックグラウンドで実行されている間にこのリクエストは終了します。

したがって、コマンドが終了するまで http req 1 を維持する必要がありますが、同時に、別の要求でプロセスを終了できる必要があります。(出力を読み取る代わりに単純な time.sleep(x) を使用すると、必要なものが得られ、req 1 が保持され、req 2 を同時に呼び出すことができます)

助けてください

4

1 に答える 1

1

http://docs.python.org/library/subprocess.html#subprocess.Popen.stdout +を使用してみることができますselect.select([p.stdout.fileno()], [], [], timeout)が、最も簡単な方法は http://docs.python.org/library/subprocess.htmlを使用することです#subprocess.Popen.pollを使用して、プロセスが終了したことを確認し、サブプロセスが終了した場合にのみ出力を読み取ります。

while p.pool() is None: # supprocess alive
    time.sleep(timeout)
out = p.stdout.read()
于 2012-05-25T11:17:06.340 に答える