2012-04-12 48 views
7

我使用Windows的Python版本。我有一个使用Pyside的Python脚本(没有什么复杂的,一种“hello world”)。我们可以知道从Windows或文本终端启动了Python脚本吗?

当我点击我的脚本文件,或者如果我从命令行启动它,它会很好地执行,我有一个GUI出现。

但是,如果脚本从文本终端(cmd.exe,cygwin,...)启动,我想避免使用GUI。一种能够自动识别它是否应该具有GUI输出或文本输出的脚本。

有没有简单的方法来做到这一点?我希望能够通过Windows版本的Python不是Cygwin软件包附带的版本)来实现。

当我从文本终端启动脚本时,一个显而易见的方法是添加一种“--no-gui”参数,但我不知道Python(或某些Python库)是否已经为此提供了工具。

此外,我在这台计算机上有一个SSH服务器(Cygwin-base),我可以在距离执行脚本但没有GUI出现(当然),我没有错误消息。这是一个非常有趣的情况,因为缺少Windows图形支持或者脚本应该为文本终端调整其输出,从而知道脚本是否失败。

+2

它不是重复的,因为这个问题是关于Windows,但在http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-run的讨论-in-a-terminal-or-via-gui可能会有所帮助。 – 2012-04-12 08:38:30

+1

更多讨论也在这里:http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri 2012-04-12 13:28:32

回答

1

我知道你可以运行文件为.py文件或.pyw文件。第二个选项用于GUI应用程序,它不打开控制台窗口。为了区分这两种情况,你可以检查isatty方法sys.stdout

import sys 
if sys.stdout.isatty(): 
    # .py file is running, with console window 
    pass 
else: 
    # .pyw file is running, no console 
    pass 

编辑

  • 我试图运行与腻子+ SSH在Linux操作系统中 - 它返回True。
  • 我试图用msys的bash shell上的Windows中 - 它返回True(.py文件)
  • 我试图用cygwin的bash shell使用Cygwin蟒蛇 - 返回(.py文件)真
  • 不幸的是,我没有可能尝试putty + windows cygwin ssh服务器。
+0

你也可以用' pythonw.exe'在没有控制台的情况下运行。 – bereal 2012-04-12 08:33:39

+0

有趣,但不适用于所有情况。从cmd.exe和单击该文件时,对于.pyw,isatty()为True,对于.pyw为False,所以您的想法很有效。从cygwin和SSH会话(Putty和ssh for cygwin),isatty()是False(提醒我使用Windows版本的Python,而不是Cygwin)。或者我错过了什么? – 2012-04-12 08:34:02

+0

我真的很抱歉,但我再次测试过,与您的编辑说的相反,它不适用于Cygwin bash shell。你使用了哪个Python版本?我特别提到Windows版本的Python,而不是Cygwin软件包中的版本(我同意它会返回True,但它的想法是使用Python for Windows)。 – 2012-04-12 11:04:53