我正在使用Python的fileinput
模块从stdin
或作为程序参数传入的文件中读取数据。很好,效果很好。问题是如果没有输入,我希望程序表现不同。当stdin
上没有任何内容且没有程序参数时,stdin
从控制台读取数据,即它变为交互式数据。那就是我想要检测的状态。 fileinput
并未在此处宣传任何可提供帮助的工具。有一些方法可以确定当前行是文件还是流(例如isstdin
)。
使用other answers,并在fileinput
的内部进行摸索,我发现有些东西可以工作,但是它依赖于FileInput._files
,这就像我不应该使用的东西:
import sys, fileinput
def has_lines():
lines = fileinput.input()
return (lines._files != ('-',) or not sys.stdin.isatty()), lines
# ^ ^
# | |
# Concerned about referring to internals |
# Returns false if there's something in stdin
existing_input, lines = has_lines()
if existing_input:
for line in lines:
pass #Batch processing mode
else:
pass #Interactive mode
是否可以在不戳FileInput
对象内部的情况下检测交互模式?