[解決済み】タイムアウトを伴うモジュール「subprocess」の使用について
2022-03-25 05:52:30
質問
以下は、任意のコマンドを実行して、そのコマンドの
stdout
のデータ、またはゼロ以外の終了コードで例外を発生させます。
proc = subprocess.Popen(
cmd,
stderr=subprocess.STDOUT, # Merge stdout and stderr
stdout=subprocess.PIPE,
shell=True)
communicate
は、プロセスの終了を待つために使用されます。
stdoutdata, stderrdata = proc.communicate()
は
subprocess
モジュールはタイムアウト、つまりX秒以上実行されているプロセスを強制終了する機能をサポートしていません。
communicate
は、実行に永遠にかかるかもしれません。
とは何ですか? 最もシンプルな WindowsとLinuxで動作するPythonのプログラムでタイムアウトを実装する方法は?
どのように解決するのですか?
Python 3.3+の場合。
from subprocess import STDOUT, check_output
output = check_output(cmd, stderr=STDOUT, timeout=seconds)
output
は、コマンドのマージされた標準出力、標準エラーデータを含むバイト文字列です。
check_output
レイズ
CalledProcessError
とは異なり、質問のテキストで指定されたゼロでない終了ステータスで
proc.communicate()
メソッドを使用します。
を削除しました。
shell=True
は不必要に使われることが多いからです。以下のような場合は、いつでも元に戻すことができます。
cmd
は本当に必要です。もし
shell=True
すなわち、子プロセスが自身の子孫を産み出す場合。
check_output()
はタイムアウトが示すよりもずっと後に戻ることができる。
サブプロセスタイムアウトの失敗
.
タイムアウト機能は、Python 2.x では
subprocess32
3.2+ subprocess モジュールのバックポートです。
関連
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] shell=True で起動した python サブプロセスを終了させる方法