[解決済み] Python subprocess.check_output()から出力される例外をキャッチする方法は?
2023-01-24 05:19:42
質問
PythonからBitcoinの決済を行おうとしています。bashで私は通常これを行うでしょう。
bitcoin sendtoaddress <bitcoin address> <amount>
だから例えば
bitcoin sendtoaddress 1HoCUcbK9RbVnuaGQwiyaJGGAG6xrTPC9y 1.4214
成功すれば取引IDが出力されるのですが、ビットコイン残高より大きな金額を送金しようとすると、以下のような出力が出ます。
error: {"code":-4,"message":"Insufficient funds"}
Pythonのプログラムでは、今、以下のように決済を行おうとします。
import subprocess
try:
output = subprocess.check_output(['bitcoin', 'sendtoaddress', address, str(amount)])
except:
print "Unexpected error:", sys.exc_info()
十分なバランスがあればうまくいきますが、バランスが悪いと
sys.exc_info()
はこれをプリントアウトします。
(<class 'subprocess.CalledProcessError'>, CalledProcessError(), <traceback object at 0x7f339599ac68>)
これは、私がコマンドラインで取得したエラーを含んでいません。そこで質問ですが、どうすれば出力されたエラー(
{"code":-4,"message":"Insufficient funds"}
) をPythonの中から得ることができますか?
どのように解決するのですか?
によると
subprocess.check_output()
ドキュメント
の場合、エラー時に発生する例外には
output
属性があり、それを使ってエラーの詳細にアクセスすることができます。
try:
subprocess.check_output(...)
except subprocess.CalledProcessError as e:
print(e.output)
この文字列を分析し、エラーの詳細を解析するために
json
モジュールで解析することができます。
if e.output.startswith('error: {'):
error = json.loads(e.output[7:]) # Skip "error: "
print(error['code'])
print(error['message'])
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
最新
-
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のインスタンス変数とクラス変数
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?