簡體   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