小脚本既要读文件,又想支持 - 代表标准输入时,不用自己写两套分支,argparse.FileType 就够了:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("input", type=argparse.FileType("r", encoding="utf-8"))
args = parser.parse_args()
for line in args.input:
print(line.rstrip())
保存为 echo_lines.py 后,这两种调用都能跑:
python echo_lines.py notes.txt
printf 'one\ntwo\n' | python echo_lines.py -
环境是 Python 3.9+。文件不存在或无法打开时,参数解析会直接给出错误;- 则会读 stdin。做命令行小工具时挺省事。