[解決済み] サブプロセスコールから終了コードと標準エラーコードを取得する
2023-06-19 23:42:49
質問
サブプロセスが提供するcall、check_call、check_outputの各機能について読み、それぞれの動作や機能の違いについて理解しました。 現在、stdoutにアクセスできるようにcheck_outputを使用し、以下のように例外をキャッチするために"try block"を使用しています。
# "cmnd" is a string that contains the command along with it's arguments.
try:
cmnd_output = check_output(cmnd, stderr=STDOUT, shell=True, timeout=3, universal_newlines=True);
except CalledProcessError:
print("Status : FAIL")
print("Output: \n{}\n".format(cmnd_output))
私が遭遇している問題は、例外がスローされたときに、"cmnd_output" が初期化されず、stderr にアクセスできず、以下のエラーメッセージが表示されることです。
print("Output: \n{}\n".format(cmnd_output))
UnboundLocalError: local variable 'cmnd_output' referenced before assignment
例外が発生すると、tryブロック内で"check_output"がそれ以上の処理、つまり"cmnd_output"への割り当てをせずにすぐにベイルするからだと思います。 間違っていたら訂正してください。
私はstderr(stoutに送信される場合は大丈夫です)にアクセスし、終了コードにアクセスすることができる方法はありますか。私は、例外をスルーすることなく、終了コードに基づいて手動で合格/失敗をチェックすることができます。
ありがとうございました。 Ahmedです。
どのように解決するのですか?
このバージョンを試してみてください。
import subprocess
try:
output = subprocess.check_output(
cmnd, stderr=subprocess.STDOUT, shell=True, timeout=3,
universal_newlines=True)
except subprocess.CalledProcessError as exc:
print("Status : FAIL", exc.returncode, exc.output)
else:
print("Output: \n{}\n".format(output))
このようにすると、呼び出しが成功した場合のみ出力が表示されます。
の場合は
CalledProcessError
の場合、リターンコードと出力を表示します。
関連
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?