画面に表示される実行結果をテキストファイルに書き出すことも可能です.これをリダイレクトと言います.リダイレクトは python プログラム名 > 出力ファイル名
として実行します.すると指定したファイルに出力されます.出力結果はテキストエディタで開いたり,コマンドプロンプトではtype
コマンドで中身を確認できます.このとき,出力ファイル名と同じ名前のファイルがすでに存在する場合は一旦中身が削除されてから書き込まれることに注意してください.
まず,プログラムを実行してファイル (results.txt) に出力します.
(base) C:\Users\rinsaka\Documents\python>python circle.py > results.txt ⏎
(base) C:\Users\rinsaka\Documents\python>
次に,出力されたファイルの中身を確認します.なお,コマンドプロンプトの type
コマンド代わりとして,PowerShell では Get-Content
コマンドレットやそのエイリアス(別名)である gc
,cat
,type
などとなり,Bash シェルでは cat
コマンドを利用すれば良いでしょう.
(base) C:\Users\rinsaka\Documents\python>type results.txt ⏎
r = 5
s = 31.4159
(base) C:\Users\rinsaka\Documents\python>
すでに存在するファイルに追記したい場合は > 出力ファイル名
の代わりに >> 出力ファイル名
を利用します.
(base) C:\Users\rinsaka\Documents\python>python circle.py >> results.txt ⏎ (base) C:\Users\rinsaka\Documents\python>type results.txt ⏎ r = 5 s = 31.4159 r = 5 s = 31.4159 (base) C:\Users\rinsaka\Documents\python>
次は,実行時にエラーが発生するように,未定義の変数 z
を表示させるプログラムを作成します.
circle2.py
import numpy as np
r = 5
s = 2 * r * np.pi
print(f"r = {r}")
print(f"s = {s:7.4f}")
print(f"z = {z}")
上のプログラム (circle2.py) を実行するとエラーで強制終了します.
(base) C:\Users\rinsaka\Documents\python>python circle2.py ⏎
r = 5
s = 31.4159
Traceback (most recent call last):
File "C:\Users\rinsaka\Documents\python\circle2.py", line 7, in <module>
print(f"z = {z}")
^
NameError: name 'z' is not defined
(base) C:\Users\rinsaka\Documents\python>
同じプログラムの実行結果を results.txt に書き込んでみます.実行結果の出力は「標準出力」と「標準エラー出力」の2種類があり,「標準出力」のみが results.txt に書き込まれていることがわかります.一方で「標準エラー出力」は引き続き画面に表示されています.
(base) C:\Users\rinsaka\Documents\python>python circle2.py > results.txt ⏎ Traceback (most recent call last): File "C:\Users\rinsaka\Documents\python\circle2.py", line 7, in <module> print(f"z = {z}") ^ NameError: name 'z' is not defined (base) C:\Users\rinsaka\Documents\python>type results.txt ⏎ r = 5 s = 31.4159 (base) C:\Users\rinsaka\Documents\python>
「標準エラー出力」をファイルに書き出したい場合は 2> 出力ファイル名
のように指定します.次のようにすると「標準出力」は results.txt に,「標準エラー出力」は error.txt に書き出すことができます.
(base) C:\Users\rinsaka\Documents\python>python circle2.py > results.txt 2> error.txt ⏎ (base) C:\Users\rinsaka\Documents\python>type error.txt ⏎ Traceback (most recent call last): File "C:\Users\rinsaka\Documents\python\circle2.py", line 7, in <module> print(f"z = {z}") ^ NameError: name 'z' is not defined (base) C:\Users\rinsaka\Documents\python>
なお,「標準出力」を 1> 出力ファイル名
のように明示的に指定することも可能です.
(base) C:\Users\rinsaka\Documents\python>python circle2.py 1> results.txt 2> error.txt ⏎
(base) C:\Users\rinsaka\Documents\python>