繁体   English   中英

获取调用python脚本的bash脚本的位置

[英]Get location of bash script that called python script

我找不到我的问题的解决方案,我希望这不是重复的,有人可以帮助我。

我有一个bash脚本可以调用的python脚本,但是我无法检索bash脚本的目录。

我不能使用os.getcwd(因为我不会从其自己的目录中调用bash脚本)。

我无法在bash脚本中设置自定义env变量,因为我无法控制bash脚本(实际上有2个bash脚本,而我只能控制一个)

而且bash脚本可以由另一个bashscript启动,但是我只想要最后一个调用我的python脚本的脚本。

谢谢

编辑:总结问题:

->我想在我的python脚本中检索“调用我”的bash脚本的目录

我认为从python脚本内部不可能实现。 它必须由直接或间接调用它的bash脚本来驱动。

您可以使用问题@Benjamin在注释中张贴的问题中提到的方法,在bash脚本本身中找到bash脚本的路径,然后将其作为参数传递给python脚本,或设置env变量。

我知道你不想这么做。 但是诸如psutil类的其他方法也将取决于父脚本的运行方式。 如果您可以确保可以使用父脚本的绝对路径而不是调用脚本的方式来运行父脚本,那么@SocketPlayer对此问题的回答将非常适合您。 我的Macbook上有以下作品

import psutil

calling_script = psutil.Process().parent()

print ("calling_script", calling_script.cmdline()[1])

在python脚本中:(将其作为cmd参数传递的示例)

import argparse


if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    parser.add_argument(
        'callers_path', help="the shell script calling this python script must provide it's path here", type=str)
    args = parser.parse_args()
    callers_path = args.callers_path
    print ("callers_path", callers_path)

您可以通过获取运行Python脚本的父进程来实现。

尝试为此使用psutil 在此处输入图片说明

更新 :所以这里是更具体的解决方案:首先获得上面显示的父进程。

现在有两个选择:

  1. 批处理文件以绝对路径运行。
  2. 批处理文件以相对路径运行。

在绝对路径的情况下,您应该使用cmdline的输出,一切都会很好。

如果是相对路径,请从cmdline获取相对路径,然后将其与绝对路径中cwd的输出合并。

例:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM