怎么识别输入源?
原学程将引见若何辨认输出源?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。
成绩描写
我正在寻觅1种办法去肯定stdin
输出能否经由过程管讲去自另外一个运用法式。
假定我有1个法式,要末接收去自管讲尺度输出的输出数据(当您从另外一个运用法式-grep、Tail等...管讲输出数据时),要末应用默许数据文件。我没有愿望用户在涌现提醒时脚动填写数据,由于出有尺度输出管讲。
我的简略代码示比方下所示:
from sys import stdin
for line in stdin:
print line
当我应用以下敕令运转剧本时:
echo "data" | python example.py
我获得
data
剧本停止。
假如我以以下方法运转该剧本,
python example.py
它提醒用户填写输出实质,而后期待。
是以,我正在寻觅相似以下实质的实质,以免在出有经由过程管讲传输数据时涌现提醒。
from sys import stdin
if is_stdin_piped():
for line in stdin:
print line
else:
print "default"
如许的工作有能够产生吗?感谢
推举谜底
假如应用输出重定向,则尺度输出没有会像平日这样衔接到终端。您不妨应用isatty
函数检讨文件描写符能否衔接到终端:
import os
def is_stdin_piped():
return not os.isatty(0)
为更平安起睹,请应用sys.stdin.fileno()
而没有是0
。
革新:若要检讨尺度输出能否从文件(而没有是其余法式,如IDE或者外壳管讲)重定向,不妨应用fstat
:
import os, stat
def is_stdin_a_file():
status = os.fstat(0)
return stat.S_ISREG(status.st_mode)
佳了闭于怎样辨认输出源?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。