检查 Python 脚本中的交互式 shell

发布于 2024-11-09 00:55:59 字数 221 浏览 5 评论 0原文

我需要确定调用 Python 脚本的 shell 是否处于交互模式。如果处于交互模式,程序应将输出传送到 less(1) 以便于阅读。如果没有,它应该简单地将其输出打印到标准输出,以允许它通过管道传送到打印机、文件或不同的寻呼机。

在 shell 脚本中,我会检查提示变量 $PS1 是否已定义,或者在 $- 变量中存储的标志中查找 -i 选项。

在 Python 中测试交互性的首选方法是什么?

I need to determine whether the shell which invoked my Python script was in interactive mode or not. If it was in interactive mode, the program should pipe output to less(1) for easy reading. If not, it should simply print its output to stdout, to allow it to be piped away to a printer, file, or a different pager.

In a shell script, I would have checked if the prompt variable $PS1 was defined, or looked for the -i option among the flags stored in the $- variable.

What is the preferred method for testing interactivity from within Python?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

極樂鬼 2024-11-16 00:55:59

这通常效果很好

import os, sys
if os.isatty(sys.stdout.fileno()):
    ...

This is often works well enough

import os, sys
if os.isatty(sys.stdout.fileno()):
    ...
盛装女皇 2024-11-16 00:55:59

此链接,您可以使用相同的方式测试 stdin 是否与终止(tty),您可以使用 os.isatty() 来执行此操作,示例:

>>> os.isatty(0)
True

注意:来自相同的当您通过 ssh 远程调用该命令时,这将失败,给出的解决方案是测试 stdin 是否与管道关联。

From this link you can use the same way and test if stdin is associated to a terminate(tty), you can do this using os.isatty(), example:

>>> os.isatty(0)
True

N.B: From the same link this will fails when you invoke the command remotely via ssh, the solution given is to test if stdin is associated to a pipe.

吝吻 2024-11-16 00:55:59

如果您已经依赖于 matplotlib,或者您不介意引入一个依赖项,则可以随时调用 matplotlib.is_interactive()

If you already have a dependency on matplotlib, or you don't mind introducing one, you can always just call matplotlib.is_interactive()

月隐月明月朦胧 2024-11-16 00:55:59
if sys.flags.interactive:
    #interactive
else:
    #not interactive 

http://docs.python.org/library/sys.html#sys.flags

if sys.flags.interactive:
    #interactive
else:
    #not interactive 

http://docs.python.org/library/sys.html#sys.flags

撧情箌佬 2024-11-16 00:55:59

我做了一个封面类来进行测试。

例如你有:

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)

I make a cover class for testing.

For example you have :

class SuperInteractiveClass(object):
   def get_data_from_stdin(self):
      '... a lot of code here ...'
   '... and a lot of other function'

I make a second class, just for testing

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文