実現したいこと
UIありの構築物であれば画面にエラー内容をダイアログで表示することができたし、UIなしの構築物であっても、今までは結果が思わしくなければうまくいくまで調整を繰返してゴールを導くのが常でした。
恥を忍んでお聞きします、表題の実現方法・パターンを把握したいので教えて頂けますでしょうか。
【具体的な例を示すと】
以下Pythonのプログラムは 国土交通省から市町村コードの一覧を取得するために 自分が先日作ったものです。(動作内容は正直なんでもよい、今回の問合せ主旨からすると)
国土交通省のAPIを実行するために必要な詳細情報、またこのプログラムを実行した際に得られるテキストファイルの固定名を、当該プログラムは 別途の定義ファイル(config.ini)を参照して取得する作りになっています。
python
1import json 2from unittest import result 3from gql import gql, Client 4from gql.transport.aiohttp import AIOHTTPTransport 5 6import configparser 7import os 8import sys 9 10def get_Config(): 11 try: 12 # -------------------------------------------------- 13 # configparserの宣言とiniファイルの読み込み 14 # -------------------------------------------------- 15 curpath = os.path.dirname(os.path.realpath(sys.argv[0])) 16 cfgpath = os.path.join(curpath, "config.ini") 17 18 config_ini = configparser.ConfigParser() 19 config_ini.read(cfgpath, encoding='utf-8') 20 21 # -------------------------------------------------- 22 # config,iniから値取得 23 # -------------------------------------------------- 24 var1 = config_ini['DPF']['KEYITEM'] 25 var2 = config_ini['DPF']['APIKEY'] 26 var3 = config_ini['DPF']['URL'] 27 var4 = config_ini['OUTPUT']['FILEPATH'] 28 return var1, var2, var3, var4 29 except Exception: 30 raise 31 32 33def req_URL(): 34 35 try: 36 lst_config = get_Config() 37 38 39 headers = {lst_config[0] : lst_config[1]} 40 transport = AIOHTTPTransport(url=lst_config[2], headers=headers) 41 client = Client(transport=transport) 42 43 query = gql(""" 44 query{ 45 municipalities { 46 code 47 prefecture_code 48 name 49 } 50 } 51 """) 52 53 result = client.execute(query) 54 arrLst = result["municipalities"] 55 56 path_w = lst_config[3] 57 with open(path_w, mode='w') as f: 58 59 for ccDct in arrLst: 60 61 rec = "" 62 for col in ccDct.values(): 63 rec = rec + str(col) + "," 64 rec = rec[:-1] + "\n" 65 66 f.write(rec) 67 except Exception as e: 68 print ('??? ' + str(e) + ' ???') 69 sys.exit(1) 70 71if __name__ == '__main__': 72 req_URL() 73
★以下は あえて定義ファイルを存在させない状態での実行状況です★
VisualStudio2022上でのデバッグ実行時の状況)
当該プログラムを--noconsolのオプション付きでEXE化し、コマンドプロンプト経由で実行
発生している問題・分からないこと
上記のとおり、デバッグ実行時であれば異常終了した旨の把握/エラー要因の推察(定義ファイル参照できずKeyError)が可能ですが、後方のEXE化された構築物の実行パターンでは異常の検知・要因特定が行えない印象をもっています。
(sys.exitで異常終了させたのだから、標準エラー出力の確認で窺いしることができると推察も違う?)
後方のEXE化された実行パターンでも、実行後に異常がおきたことの把握・エラー内容の把握を行うにはどういった解決策があるのでしょうか?
尚、表題の「遡って」の意味合いは 当該EXEが
・人系の手動実行に留まらなくタスクスケジューラからの未明起動もありえること
・別の後続処理を有し、実行結果次第では後続処理を起動させない判断が必要になること(DB出力等)
に由来しての問合せとなっています。
把握したいの一言で、どうあるべきかがわかっていないのですが
標準エラー出力 というものから実行結果を判断し、要因特定用にストックトレースと呼ばれるものを個別のログファイルかWindowsのイベントログに出力する感じになるのでしょうか?
(だとすると、今回 %errorlevel%が 0で戻ってきている理由だけ明確にすればよい??)
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
色々とネット上で調べて、標準エラー出力という概念やPython内のsys.exit(1)の記述で強制終了を達成できることは把握できましたが
自分の頭の中で話が結び付きません。
補足
![guest](/img/icon/icnUserSample.jpg)
回答2件
あなたの回答
tips
プレビュー