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")
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')
如果您在没有终端的情况下运行它,就像在Nautilus中单击“运行”一样,您可以只检查它是否连接到tty:
但是,正如ThomasK所指出的,您似乎指的是在一个终端中运行它,该终端在程序完成后立即关闭。我认为如果没有解决方法,就无法实现您想要的目标;程序是在一个普通的shell中运行的,并附加到一个终端上。立即退出的决定是在它完成了它没有现成可用信息(传递给执行shell或终端的参数)之后做出的。
您可以继续examining the parent process information并检测这两种调用之间的差异,但在大多数情况下这可能不值得。您是否考虑过向脚本中添加命令行参数(想想
--interactive
)?如果运行python IDLE,则使用“pythonw.exe”运行编码,而运行命令行时使用“python.exe”运行编码。python文件夹路径可能会有所不同,因此必须将路径还原到python文件夹。m='\',m=m[0]是因为转义而使m成为'\'。
我不认为有任何可靠的方法可以检测到这一点(特别是以跨平台的方式)。例如在OSX上,当双击一个
.py
文件并使用“PythonLauncher”打开时,它在终端中运行,这与手动执行它的情况相同。尽管它可能有其他问题,但是您可以用py2exe或Platypus之类的东西打包脚本,然后您可以让双击图标运行特定的代码来区分(
import mycode; mycode.main(gui = True)
例如)相关问题 更多 >
编程相关推荐