簡體   English   中英

如何從Python腳本返回一個值作為Bash變量?

[英]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.

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