Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取调用方脚本名_Python_File - Fatal编程技术网

Python 如何获取调用方脚本名

Python 如何获取调用方脚本名,python,file,Python,File,我使用的是Python 2.7.6,我有两个脚本: 外圆 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,因为我有大量的被调用/调用脚本

我使用的是Python 2.7.6,我有两个脚本:

外圆

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,因为我有大量的被调用/调用脚本,并且无法重构所有代码


有什么想法吗?

在linux上,您可以获得进程id,然后是调用方名称,如下所示

p1.py

p2.py

运行
pythonp1.py
将产生
p1.py

我想你也可以在其他操作系统中做类似的事情。

一个想法是使用psutil

#!env/bin/python
import psutil

me = psutil.Process()
parent = psutil.Process(me.ppid())
grandparent = psutil.Process(parent.ppid())
print grandparent.cmdline()
这当然取决于如何启动outer.py。
此解决方案与操作系统无关。

如果适用于您的情况,您也可以简单地传递一个参数,让inner.py区分:

import sys
import os

print "Outer file launching..."
os.system('inner.py launcher')
因特尔·皮伊酒店

import sys
import os

try:
    if sys.argv[0] == 'launcher':
        print 'outer.py called us'
except:
    pass

另一个是仅用于unix的略短版本

导入操作系统
parent=os.system('readlink-f/proc/%d/exe'%os.getppid())

我认为使用
os.system
是不可能的。实际上,您需要通过操作系统调用一个新的python会话。当使用
系统
的名称调用
系统
时,您可以在
外部.py
中设置一些环境变量,并在
内部.py
中检查它是否存在。我认为没有任何其他解决方法。如果您计划让
internal.py
根据调用它的人做不同的事情,那将是一场维护噩梦。
import sys
import os

print "Outer file launching..."
os.system('inner.py launcher')
import sys
import os

try:
    if sys.argv[0] == 'launcher':
        print 'outer.py called us'
except:
    pass