我使用的是Python 2.7.6,我有两个脚本:
outer.py
import sys
import os
print "Outer file launching..."
os.system('inner.py')
调用inner.py:
import sys
import os
print "[CALLER GOES HERE]"
我希望第二个脚本(inner.py)打印调用者脚本的名称(outer.py)。 我无法将带有第一个脚本名称的参数传递给inner.py,因为我有大量的被调用/调用脚本,我无法重构所有代码。
有什么想法吗?
谢谢,Gianluca
答案 0 :(得分:3)
一个想法是使用psutil。
#!env/bin/python
import psutil
me = psutil.Process()
parent = psutil.Process(me.ppid())
grandparent = psutil.Process(parent.ppid())
print grandparent.cmdline()
这取决于你如何启动outer.py。 这个解决方案是独立的。
答案 1 :(得分:2)
在Linux上,您可以获取进程ID,然后获取调用者名称。
p1.py
import os
os.system('python p2.py')
p2.py
import os
pid = os.getppid()
cmd = open('/proc/%d/cmdline' % (pid,)).read()
caller = ' '.join(cmd.split(' ')[1:])
print caller
正在运行python p1.py
会产生p1.py
我想你也可以在其他操作系统中做类似的事情。
答案 2 :(得分:1)
如果适用于您的情况,您还可以简单地传递一个让inner.py区分的参数:
import sys
import os
print "Outer file launching..."
os.system('inner.py launcher')
innter.py
import sys
import os
try:
if sys.argv[0] == 'launcher':
print 'outer.py called us'
except:
pass
答案 3 :(得分:0)
另一个版本,仅适用于UNIX
import os
parent = os.system('readlink -f /proc/%d/exe' % os.getppid())