如何获取调用者脚本名称

时间:2014-06-09 06:24:09

标签: python file

我使用的是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

4 个答案:

答案 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())