#やりたかったこと
皆さんはAtCoderのコードテストやyukicoderのオンライン実行のような機能を利用しようとしたことはありますか?わたしはそれをPythonで実行できたらいいなぁ~と思ってました。
まあ要するに.txtのファイルをPythonのinput()で読み込めたらいいなぁ~ってことです。
なおこの実行環境はWindows10です。
###コマンドプロンプトにおいて
まずはじめに適当なフォルダーを作ってそこに適当なinput用のinput.txtファイルとinput()関数が入ったmain.pyファイルをぶち込んでみましょう。
コマンドプロンプトでさっき作ったフォルダーに移動してpython main.py < input.txtと入力するとあら不思議、textファイルから読み込めているではありませんか!!
ちなみにこれをopen(0).read()とかでやっても動きます。
###Pythonにおいて
わたしはsubprocessでやろうとして試行錯誤しまくって3日つぶしました。あほです。以下のソースコードでprint関数で出てくるoutputが出て来ます。timeoutオプションは実行時間制限、shell=Trueで本物のコマンドプロンプトで動いてくれます。ちなみにoutputはbyte型で出てくるので文字列型にしたい方はencode()で煮るなり焼くなりしてくださいな...
しかし公式のドキュメントにはセキュリティの脆弱性になりうるので使わないことが推奨されます。Winodws滅びの呪文を指定してしまったらPythonだけでなくWindowsごと消え去ってしまいますからね...
import subprocess
print(subprocess.check_output('python main.py < input.txt',timeout=5,shell=True))
###実はほかにも...
Popen()関数でもっと詳しくできるらしいです。全くわかりません。理解に5日ぐらいかかりそうです。
#最後に
クソ記事になりました。詳しくなったらもっと書きます。。。