如何将值python脚本返回给bash变量

时间:2013-11-17 13:56:17

标签: python bash return-value main

这是代码摘要:

# 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")

4 个答案:

答案 0 :(得分:2)

如果您在bash工作,那么您可以这样做:

export var="value"

但是,Python中没有这样的等价物。如果您尝试使用os.environ,那么这些值将在剩余的过程中持续存在,并且在程序完成后不会修改任何内容。你最好的选择就是做你正在做的事情。

答案 1 :(得分:2)

更多 pythonic 方式是避免bash并在python中编写全部内容。

你不能指望bash有一种pythonic方式从另一个进程获取值 - 这就是bash方式。

bash和python在不同的进程中运行,进程间通信(IPC)必须通过内核。有许多IPC机制,但bash并不支持所有这些机制(例如共享内存)。这里最低的共同点是bash,所以你必须使用什么bash支持,而不是python有什么(python拥有一切)。

没有共享内存,写入另一个进程的变量并不是一件简单的事情 - 更不用说另一种语言了。调试器会这样做,但它们是专门为宿主语言编写的。

你在bash中使用的机制是捕获子进程的stdout,因此python必须print。在封面下,它使用匿名管道。您可以使用命名管道(也称为fifo),哪个python将作为普通文件打开,write打开它。但它不会给你带来太大的收获。

答案 2 :(得分:0)

只需使用sys.exit(),即:

import sys

[...]

if __name__ == "__main__":
    sys.exit(main())

答案 3 :(得分:0)

您可以尝试在python代码中设置环境变量,并在bash脚本中将其读取到外部。这种方式看起来非常优雅,但它绝对不是“完美的解决方案”或唯一的解决方案。如果你喜欢这种方法,这个线程可能很有用:How to set environment variables in Python

还有其他方法,与您所做的非常相似。检查此主题:store return value of a Python script in a bash script