如何确定Python脚本是否通过命令行运行?

2024-04-24 00:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

背景

我希望在退出之前暂停我的Python脚本,使用类似于:

raw_input("Press enter to close.")

但前提是它不是通过命令行运行的。命令行程序不应该这样做。

问题

是否有方法确定我的Python脚本是否从命令行调用:

$ python myscript.py

verses双击myscript.py在操作系统中用默认解释器打开它?


Tags: to方法命令行py程序脚本closeinput
3条回答

如果您在没有终端的情况下运行它,就像在Nautilus中单击“运行”一样,您可以只检查它是否连接到tty:

import sys
if sys.stdin.isatty():
    # running interactively
    print "running interactively"
else:
    with open('output','w') as f:
        f.write("running in the background!\n")

但是,正如ThomasK所指出的,您似乎指的是在一个终端中运行它,该终端在程序完成后立即关闭。我认为如果没有解决方法,就无法实现您想要的目标;程序是在一个普通的shell中运行的,并附加到一个终端上。立即退出的决定是在它完成了它没有现成可用信息(传递给执行shell或终端的参数)之后做出的。

您可以继续examining the parent process information并检测这两种调用之间的差异,但在大多数情况下这可能不值得。您是否考虑过向脚本中添加命令行参数(想想--interactive)?

如果运行python IDLE,则使用“pythonw.exe”运行编码,而运行命令行时使用“python.exe”运行编码。python文件夹路径可能会有所不同,因此必须将路径还原到python文件夹。m='\',m=m[0]是因为转义而使m成为'\'。

import sys
a = sys.executable
m = '\\'
m = m[0]
while True:
    b = len(a)
    c = a[(b - 1)]
    if c == m:
        break
    a = a[:(b - 1)]
if sys.executable == a + 'pythonw.exe':
    print('Running in Python IDLE')
else:
    print('Running in Command line')

我不认为有任何可靠的方法可以检测到这一点(特别是以跨平台的方式)。例如在OSX上,当双击一个.py文件并使用“PythonLauncher”打开时,它在终端中运行,这与手动执行它的情况相同。

尽管它可能有其他问题,但是您可以用py2exePlatypus之类的东西打包脚本,然后您可以让双击图标运行特定的代码来区分(import mycode; mycode.main(gui = True)例如)

相关问题 更多 >