簡體   English   中英

來自 if __name__ == "__main__" 的返回語句

[英]Return statement from if __name__ == "__main__"

首先,我知道我不應該從 if name == " main " 返回任何東西,它只應該包括對 main() 的調用。

我想要做的是通過它的路徑從遠處的文件調用一個 python 文件(導入文件/函數不是一個選項)

目前我正在使用它來調用我的文件

result = subprocess.getstatusoutput('python farAwayFile.py')

但是,我想從這個文件中得到看起來像......

("success", "I am farAwayFile print statement")

在我的 farAwayFile.py

def main():
    print('I am farAwayFile print statement')
    return "success"

if __name__ == "__main__":
    main()

如果在我的 farAwayFile.py 中我改變了...

 if __name__ == "__main__":
    return main()

我得到了我想要的結果,但是我在函數定義之外有一個 return 語句,它會干擾任何 pylint。

所以我的問題是,如何從 farAwayFile.py 返回結果?

在 UNIX shell 中,返回值在 0 到 255 之間,因此您不能在最終的 return 語句中返回字符串(當然可以,但不能使用返回值)。
使用subprocess.stout/stderr獲取打印語句; subprocess.returncode獲取返回碼。

最好的方法是導入模塊。

您還可以將 farAwayFile 的返回值寫入文件(使用 pickle)並在主程序中讀回。

我想要做的是通過它的路徑從遠處的文件調用一個 python 文件(導入文件/函數不是一個選項)

我認為假設你不知道如何比你不能更安全。

您已經知道文件的路徑,因為您想將它作為子進程運行,那么為什么不將該路徑添加到 PATH 中呢? ;)

import sys
sys.path.append("/your/path/here")
from farAwayFile import main

IDE 會抱怨他們不知道導入的模塊(因為它沒有顯示在它們的依賴項中;您可以修復它以便建議正確顯示)並且如果他們檢查 PEP8,您將收到有關導入不在頂部的投訴的文件。 但它會起作用。

這樣你就不必更改模塊中的任何內容,也不必像評論中建議的那樣將任何內容寫入磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM