如何获取调用者脚本名称

Gia*_*anx 6 python file

我正在使用 Python 2.7.6 并且我有两个脚本:

外部文件

import sys
import os

print "Outer file launching..."
os.system('inner.py')
Run Code Online (Sandbox Code Playgroud)

调用inner.py:

import sys
import os

print "[CALLER GOES HERE]"
Run Code Online (Sandbox Code Playgroud)

我希望第二个脚本 (inner.py) 打印调用者脚本 (outer.py) 的名称。我无法将带有第一个脚本名称的参数传递给 inner.py,因为我有大量被调用/调用者脚本,而且我无法重构所有代码。

任何的想法?

jor*_*gen 8

一种想法是使用 psutil。

#!env/bin/python
import psutil

me = psutil.Process()
parent = psutil.Process(me.ppid())
grandparent = psutil.Process(parent.ppid())
print grandparent.cmdline()
Run Code Online (Sandbox Code Playgroud)

这当然取决于您如何启动outer.py。此解决方案与操作系统无关。


Fab*_*tor 5

在 linux 上,您可以像这样获取进程 ID,然后是调用者名称。

p1.py

import os
os.system('python p2.py')
Run Code Online (Sandbox Code Playgroud)

p2.py

import os

pid = os.getppid()
cmd = open('/proc/%d/cmdline' % (pid,)).read()
caller = ' '.join(cmd.split(' ')[1:])
print caller
Run Code Online (Sandbox Code Playgroud)

运行python p1.py会产生p1.py 我想你也可以在其他操作系统中做类似的事情。