前提・実現したいこと
pythonプログラムの中でほかのpythonプログラムを呼び出して、結果を.txtとして保存したいです
もし呼び出されるほうのプログラムにエラーがあった場合、そのエラーもおなじテキストファイルに書き込みたいです。
subprocess関数でgetoutputを使ってやってみたのですが、呼ばれるプログラムがちゃんと動く場合にはなにも書き込まれず、
エラーが発生している場合には呼び出すプログラムが止まってしまい.txtファイルすら生成されません
理想としては、
・呼ばれるプログラムの実行結果をテキストファイルとして保存する(呼ばれるプログラムにファイルとして保存するコードは書きたくない)
・呼ばれるプログラムにエラーがあった場合、そのエラーメッセージをテキストファイルとして保存したい
つまり、呼ばれるプログラムにエラーがあるか、ちゃんと実行できるのかを判断するプログラムを作りたいということです。
発生している問題・エラーメッセージ
もし呼ばれる側のコードに間違いがなかった場合、プロンプトに
shall
1Iは1以外でしたよ 2'miss' は、内部コマンドまたは外部コマンド、 3操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示され、生成されたテキストファイルには
txt
1'miss' は、内部コマンドまたは外部コマンド、 2操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と書き込まれます
呼ばれる側のコードに間違いがあった場合、プロンプトに
shall
1Traceback (most recent call last): 2 File "C:\#################\subprocesstest.py", line 8, in <module> 3 import miss 4 File "C:\#################\miss.py", line 6 5 if i == 1 6 ^ 7SyntaxError: invalid syntax
と出てくるだけでテキストファイルは生成されません(ディレクトリは隠しているだけです)
該当のソースコード
python
1# -*- coding: utf-8 -* 2#呼び出されるほうのコードです 3i = 2 4 5#わざとif文の最後から:を抜いてエラーが出るようにしています 6if i == 1 7 print("Iは1でしたよ") 8else: 9 print("Iは1以外でしたよ") 10
python
1# -*- coding: utf-8 -* 2#呼ぶほうのコードです 3 4#subprocessの呼び出し 5import subprocess 6 7#同じ階層にある呼び出されるプログラムの読み込み 8import miss 9 10#呼び出したのを使う。 11ret = subprocess.getoutput('miss') 12 13#結果の出力 14print(ret) 15 16#ファイルに書き込む 17file = open('result.txt', 'w') 18file.write(ret) 19file.close()
試したこと
subprocessのgetoutput以外を試したり、
その引数を
’miss’
から
’python miss.py > result.txt’
などに変えたりしました
補足情報(FW/ツールのバージョンなど)
python 3.9.5
visual studio code
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/10 04:25