如何判断您是否通过Pythonwin或控制台运行

时间:2014-12-14 22:09:03

标签: python user-interface input console-application

我正在使用PythonWin。如果在IDE中我单击Run,则任何input()命令将弹出为Windows消息框。但是在控制台中它们是打印的控制台命令。

我尝试在PythonWin中使用msvcrt.getch(),每次都返回字符\xFF

如果它在控制台中,我希望我的程序使用msvcrt.getch(),如果它在PythonWin中,我希望input()。那么,我的程序如何判断它正在运行哪一个?

2 个答案:

答案 0 :(得分:1)

通过PythonWin运行时,我可以通过步入input()的源代码来找出解决方案。我在这里发帖,以便遇到这个问题的其他人有解决方案。

在PythonWin中运行时,

"pywin.framework.startup" in sys.modulesTrue,而在控制台中运行时为False

所以我的代码看起来像这样:

if "pywin.framework.startup" in sys.modules:
    move = raw_input(promptstr)
else:
    print(promptstr)
    move = msvcrt.getch()

答案 1 :(得分:1)

您可以使用os.isatty检查您是在常规shell(python.exe)还是自定义shell(IPython,PythonWin,DreamPie ...)中:

import os
import sys
import io

try:
    if os.isatty(sys.stdin.fileno()):
        print "msvcrt.getch() will work."
    else:
        print "msvcrt.getch() will fail."
except (AttributeError, io.UnsupportedOperation):
    print "msvcrt.getch() will fail."