[英]How to return a value from Python script as a Bash variable?
這是我的代碼的摘要:
# import whatever
def createFolder():
#someCode
var1=Gdrive.createFolder(name)
return var1
def main():
#someCode
var2=createFolder()
return var2
if __name__ == "__main__":
print main()
我設法將值返回到bash變量的一種方法是打印從main()返回的內容。 另一種方法是在腳本的任何位置打印變量 。
有沒有辦法以更加pythonic的方式返回它?
腳本以這種方式調用:
folder=$(python create_folder.py "string_as_arg")
更pythonic的方法是避免bash並在python中編寫整個批次。
你不能指望bash
有一種pythonic方式從另一個進程獲取值 - 它的方式是bash方式。
bash和python在不同的進程中運行,進程間通信(IPC)必須通過內核。 有許多IPC機制,但bash並不支持所有這些機制(例如共享內存)。 這里最低的共同點是bash,所以你必須使用什么bash支持,而不是python有什么(python擁有一切)。
沒有共享內存,寫入另一個進程的變量並不是一件簡單的事情 - 更不用說另一種語言了。 調試器會這樣做,但它們是專門為宿主語言編寫的。
你從bash使用的機制是捕獲子進程的stdout,所以python必須print
。 在封面下,這使用匿名管道 。 您可以使用命名管道(也稱為fifo),python將作為普通文件打開並write
。 但它不會給你帶來太大的收獲。
如果你在bash工作,那么你可以簡單地做:
export var="value"
但是,Python中沒有這樣的等價物。 如果您嘗試使用os.environ
那么這些值將在剩余的進程中持續存在,並且在程序完成后不會修改任何內容。 你最好的選擇就是做你正在做的事情。
您可以嘗試在python代碼中設置環境變量,並在bash腳本中將其讀取到外部。 這種方式看起來非常優雅,但它絕對不是“完美的解決方案”或唯一的解決方案。 如果你喜歡這種方法,這個線程可能很有用: 如何在Python中設置環境變量
還有其他方法,與您所做的非常相似。 還要檢查此線程: 在bash腳本中存儲Python腳本的返回值
只需使用sys.exit()
,即:
import sys
[...]
if __name__ == "__main__":
sys.exit(main())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.