Jac*_*ing 24 python command-line
我希望我的Python脚本在退出之前暂停使用类似于:
raw_input("Press enter to close.")
但仅当它不是通过命令行运行时.命令行程序不应该以这种方式运行.
有没有办法确定我的Python脚本是否是从命令行调用的:
$ python myscript.py
双击myscript.py打开它与操作系统中的默认解释器?
Edu*_*nec 15
如果您在没有终端的情况下运行它,就像在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")
Run Code Online (Sandbox Code Playgroud)
但是,正如ThomasK所指出的那样,你似乎指的是在程序结束后关闭的终端中运行它.我认为没有解决办法就没办法做你想做的事; 程序在常规shell中运行并附加到终端.立即退出的决定是在完成它没有现成的信息(传递给执行的shell或终端的参数)之后完成的.
您可以继续检查父进程信息并检测两种调用之间的差异,但在大多数情况下可能不值得.您是否考虑过在命令行中添加命令行参数(想想--interactive)?
小智 11
我想要的在这里得到了解答:确定程序是否是从Python脚本中调用的
您可以在“python”和“bash”之间进行确定。我想这已经得到了回答,但你也可以保持简短。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import psutil
import os
ppid = os.getppid() # Get parent process id
print(psutil.Process(ppid).name())
Run Code Online (Sandbox Code Playgroud)
我认为没有任何可靠的方法来检测这一点(特别是以跨平台的方式)。例如,在 OS X 上,当您双击一个.py文件并使用“Python Launcher”进行调整时,它会在终端中运行,与手动执行它的情况相同。
虽然它可能有其他问题,但您可以使用py2exe或Platypus之类的东西打包脚本,然后您可以让双击图标运行特定的代码来区分(import mycode; mycode.main(gui = True)例如)
小智 5
如果您运行 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')
Run Code Online (Sandbox Code Playgroud)