そのユーザーの で任意のユーザー提供のコマンドを実行したい$SHELL
。コマンドは短命 ( などls
) または長命 ( などfirefox
) の場合があり、単一のコマンド、パイプライン、またはシェルがサポートするその他の構成要素の場合があります。
実行方法は、シェルに代わって成功または失敗を示す必要があり、コマンドがいつ終了するかどうかにかかわらず、ブロックしてはなりません。コマンドは、実行方法が戻ってプログラムが続行されるまで終了しない場合があります。
Popen()
withshell=True
はブロックしませんが、失敗を示しません。ヘルパー関数はブロックするため、subprocess
ここでは役に立ちません。(この質問Popen.poll()
で推奨) は、コマンドが終了するまで戻り、すぐに non- on の失敗を返しません (シェルが終了するまで繰り返し呼び出す必要があります)。None
None
望ましい動作の例として
prog1 = shell_run('blocking_prog', stdin=PIPE, stdout=PIPE)
prog2 = shell_run('nonsense_prog', stdin=PIPE, stdout=PIPE)
Popen
1 行目でオブジェクトをに割り当てprog1
、2 行目でOSError
または同様のものを発生させる必要があります。
これらの条件下でエラーを確実に検出することは不可能であると考えてよろしいですか?Popen()