我有一个 CLI 脚本并希望它从文件中读取数据。它应该能够以两种方式阅读它:
cat data.txt | ./my_script.py
./my_script.py data.txt
——例如,有点像grep
。
我知道的:
sys.argv
optparse
让我轻松阅读任何参数和选项。sys.stdin
让我读取管道输入的数据fileinput
使整个过程自动化
很遗憾:
- using
fileinput
使用标准输入和任何参数作为输入。所以我不能使用不是文件名的选项,因为它试图打开它们。 sys.stdin.readlines()
工作正常,但如果我不传输任何数据,它会挂起,直到我输入Ctrl + D- 我不知道如何实现“如果标准输入中没有任何内容,则从 args 中的文件中读取”,因为
stdin
它始终True
处于布尔上下文中。
如果可能的话,我想要一种便携的方式来做到这一点。