我需要确定调用我的Python脚本的shell是否处于交互模式.如果它处于交互模式,程序应将输出管道输出到较小(1)以便于阅读.如果没有,它应该只是将其输出打印到stdout,以允许它被传送到打印机,文件或不同的寻呼机.
在shell脚本中,我会检查是否定义了提示变量$ PS1,或者在$ - 变量中存储的标志中查找-i选项.
在Python中测试交互性的首选方法是什么?
我使用的是Windows版本的Python.我有一个使用Pyside的Python脚本(没什么复杂的,一种"hello world").
当我单击我的脚本文件或者从命令行启动它时,它会完美地执行,并且我会出现一个GUI.
但是,如果脚本是从文本终端(cmd.exe,cygwin,...)启动的话,我想避免使用GUI.一种自动知道它应该具有GUI输出还是文本输出的脚本.
有一种简单易行的方法吗?我希望能够使用Windows版本的Python(不是Cygwin软件包附带的版本).
当我从文本终端启动脚本时,一种显而易见的方法是添加一种"--no-gui"参数,但我想知道Python(或某些Python库)是否已经为此提供了工具.
此外,我在这台计算机上有一个SSH服务器(Cygwin-base),我可以远距离执行脚本但是没有GUI出现(当然),我没有错误消息.在这种情况下,由于缺少Windows图形支持或者脚本应该将其输出调整为文本终端,因此知道脚本是否失败是非常有趣的.
背景
我有一个 Python 3.5 控制台程序通过 pyinstaller 编译成 Windows 可执行文件。
题
我如何检测这些不同的场景?
约束
我尝试过的事情
sys.stdin.isatty()
/sf/answers/267298601/
os.isatty(sys.stdout.fileno())
/sf/answers/427595311/
这些总是True在 Windows 上返回。
搜索 StackOverflow/互联网:
如何确定 Python 脚本是否通过命令行运行?
如何检查 Python 脚本是否以交互方式启动?
据我所知,如果用户启动了程序,无论它是从命令提示符还是 GUI 启动,它都会以交互方式运行。
我还考虑检查父进程是否为cmd.exe或explorer.exe。但是,通过 Windows 运行命令启动程序将使explorer.exe父进程。通过任务管理器启动程序将使任务管理器成为父进程。这些是我可以忍受的边缘情况,但显然我更喜欢更强大的解决方案。
我希望我的脚本有2个行为,一个作为计划任务启动,另一个如果手动启动.我怎样才能测试互动性?
编辑:这可以是一个cron作业,也可以通过Windows批处理文件,通过计划任务启动.
python ×4
interactive ×2
windows ×2
cygwin ×1
pipe ×1
pyinstaller ×1
python-3.x ×1
shell ×1
ssh ×1