在Python脚本中检查交互式shell

jfo*_*erg 25 python shell interactive pipe

我需要确定调用我的Python脚本的shell是否处于交互模式.如果它处于交互模式,程序应将输出管道输出到较小(1)以便于阅读.如果没有,它应该只是将其输出打印到stdout,以允许它被传送到打印机,文件或不同的寻呼机.

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

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

Joh*_*ooy 32

这通常效果很好

import os, sys
if os.isatty(sys.stdout.fileno()):
    ...
Run Code Online (Sandbox Code Playgroud)

  • `sys.stdout.isatty()`更短. (17认同)
  • 并且`sys .__ stdin __.isatty()`更可靠.(不受`stdin`重定向影响并允许管道输出) (9认同)
  • @lunaryom是的,我知道.但他确实写道"如果它处于交互模式,程序应该将输出管道输入到较少(1)以便于阅读"对我而言,这意味着他根据其性质检查`stdin`并重定向`stdout`. (3认同)