引数をファイル名かstdinから読み込む
#!/usr/bin/env python3
"""
引数がファイルだったらファイルの内容を、
そうでなければ引数をprintする
"""
import sys
import fileinput
from pathlib import Path
if Path(sys.argv[1]).exists(): # 第一引数がファイルだったら
for line in fileinput.input(): # ファイルの内容を一行ずつprint
print('file input')
print(line)
else: # 第一引数がファイルではなかったら
for i in sys.argv[1:]: # 引数の文字列をprint
print('args input')
print(i)
実行結果
$ python stdin_test.py hoge.txt fuga.txt
file input
MYNAME!
file input
HERO!!
$ python stdin_test.py 1 2 3
args input
1
args input
2
args input
3
sys.argv
がリストで返るので、fileinput.input()
の結果もリスト形式で返るようにして使いました。
引数をファイル名かstdinから読み込んでリストで返す
if Path(sys.argv[1]).exists(): # 第一引数がファイルだったら
ARGV = [
line.replace('\n', '') for line in fileinput.input() # 改行削除
if line != '\n' # 空行削除
]
else: # 第一引数がファイルではなかったら
ARGV = sys.argv[1:]
Python公式doc