2

そのユーザーの で任意のユーザー提供のコマンドを実行したい$SHELL。コマンドは短命 ( などls) または長命 ( などfirefox) の場合があり、単一のコマンド、パイプライン、またはシェルがサポートするその他の構成要素の場合があります。

実行方法は、シェルに代わって成功または失敗を示す必要があり、コマンドがいつ終了するかどうかにかかわらず、ブロックしてはなりません。コマンドは、実行方法が戻ってプログラムが続行されるまで終了しない場合があります。

Popen()withshell=Trueはブロックしませんが、失敗を示しません。ヘルパー関数はブロックするため、subprocessここでは役に立ちません。(この質問Popen.poll()で推奨) は、コマンドが終了するまで戻り、すぐに non- on の失敗を返しません (シェルが終了するまで繰り返し呼び出す必要があります)。NoneNone

望ましい動作の例として

prog1 = shell_run('blocking_prog', stdin=PIPE, stdout=PIPE)
prog2 = shell_run('nonsense_prog', stdin=PIPE, stdout=PIPE)

Popen1 行目でオブジェクトをに割り当てprog1、2 行目でOSErrorまたは同様のものを発生させる必要があります。

これらの条件下でエラーを確実に検出することは不可能であると考えてよろしいですか?Popen()

4

2 に答える 2

1

私はあなたの質問に直接答えているわけではありませんが、plumbumそのようなタスクに使用すると、あなたの生活がとても楽になります. http://plumbum.readthedocs.org/en/latest/

于 2013-03-07T19:23:04.183 に答える