![](/img/trans.png)
[英]Cannot return value from `if __name__ == "__main__"` in a Python script?
[英]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.