我需要确定调用我的Python脚本的shell是否处于交互模式下。如果是交互模式,程序应该将输出导向到less(1),以便易于阅读。如果不是,则应该简单地将输出打印到stdout,以允许它被导向打印机、文件或另一个分页器。
在shell脚本中,我会检查提示变量$PS1是否定义,或者在$-变量存储的标志中查找-i选项。
从Python中测试交互性的首选方法是什么?
我需要确定调用我的Python脚本的shell是否处于交互模式下。如果是交互模式,程序应该将输出导向到less(1),以便易于阅读。如果不是,则应该简单地将输出打印到stdout,以允许它被导向打印机、文件或另一个分页器。
在shell脚本中,我会检查提示变量$PS1是否定义,或者在$-变量存储的标志中查找-i选项。
从Python中测试交互性的首选方法是什么?
这通常足够好用了
import os, sys
if os.isatty(sys.stdout.fileno()):
...
你可以使用这个链接中的相同方法来测试stdin是否与终止(tty)相关联,你可以使用os.isatty()来实现,例如:
>>> os.isatty(0)
True
sys.__stdin__.isatty()
。 - Evpoksys.__stdin__.isatty()
,而据我所知,交互模式意味着stdin关联到终端而不是stdout,如果我错了,请纠正我 :) - mouad如果您已经依赖于matplotlib,或者您不介意引入它,您可以随时调用matplotlib.is_interactive()。
if sys.flags.interactive:
#interactive
else:
#not interactive
class SuperInteractiveClass(object):
def get_data_from_stdin(self):
'... a lot of code here ...'
'... and a lot of other function'
class TestSuperInteractiveClass(SuperInteractiveClass):
prepared_data = []
def add_prepared_data(self,data):
self.prepared_data.append(data)
def get_data_from_stdin(self):
return self.prepared_data.pop(0)
sys.stdout.isatty()
更短。 - user355252sys.__stdin__.isatty()
更可靠。(不受stdin重定向影响,允许通过管道输出) - Evpoksys.__stdout__.isatty()
吗?当输入不是tty时,输出仍然可能是tty,而且OP似乎对输出感兴趣。 - John La Rooystdin
并根据其性质重定向stdout
。 - Evpok