有没有办法知道我从哪个应用程序运行 python 脚本?
我可以从多个来源运行 python,例如 Textmate、Sublime Text 2 或终端(我在 Mac OSX 上)。我怎么知道,究竟是哪个工具启动了当前的 python 应用程序。
我试过研究os
andinspect
模块,但找不到解决方案。
有没有办法知道我从哪个应用程序运行 python 脚本?
我可以从多个来源运行 python,例如 Textmate、Sublime Text 2 或终端(我在 Mac OSX 上)。我怎么知道,究竟是哪个工具启动了当前的 python 应用程序。
我试过研究os
andinspect
模块,但找不到解决方案。
您可以使用psutil以相当跨平台的方式执行此类操作:
import psutil
import os
my_process = psutil.Process(os.getpid())
parent = my_process.parent
print "Parent process name: " + parent.name
从psutil
文档中:
它目前支持 32 位和 64 位的 Linux、Windows、OSX 和 FreeBSD,并使用单一代码库提供从 2.4 到 3.3 的 Python 版本。
除了名称之外,您还可以获得可执行路径(如果您从选项列表中选择,这可能会更有用)以及调用它的完整命令行。您还可以获得运行该过程的用户名。有关参数及其可用平台的详细信息,请参阅psutil 类文档。
顺便说一句,如果可能的话,我会构建您的代码,这样您就不必根据调用应用程序修改您的行为 - 最好让调用应用程序传入一个修改行为的参数共享代码。但是,我很欣赏有时其他问题优先于代码的清洁度,因此psutil
应该使您能够按照您的要求进行操作。
如果您乐于保持特定于 unix,那么您可以使用os.getppid()
. 如果您想将其转换回程序 id,您可以运行一个子进程以使用相关的特定于操作系统的 PID-to-useful-data 工具(赔率 - ps
)