确定fileinput.input是否有任何输入?

时间:2018-10-04 01:11:53

标签: python

我正在使用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对象内部的情况下检测交互模式?

0 个答案:

没有答案