我正在使用 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,因为我有大量被调用/调用者脚本,而且我无法重构所有代码。
任何的想法?
一种想法是使用 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。此解决方案与操作系统无关。
在 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
我想你也可以在其他操作系统中做类似的事情。