如何获取调用脚本的名称
我正在使用 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,因为我有很多这样的调用和被调用的脚本,没办法把所有的代码都改一遍。
有没有什么好主意呢?
4 个回答
-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
1
这是一个稍微简短一点的版本,仅适用于Unix系统
import os
parent = os.system('readlink -f /proc/%d/exe' % os.getppid())
5
在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
的名字。我想在其他操作系统中也可以做类似的事情。
9
一个想法是使用 psutil 这个库。
#!env/bin/python
import psutil
me = psutil.Process()
parent = psutil.Process(me.ppid())
grandparent = psutil.Process(parent.ppid())
print grandparent.cmdline()
当然,这个方法取决于你是怎么启动 outer.py 这个文件的。这个解决方案和操作系统无关。