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

How to return a value python script to bash variable

这是代码的摘要:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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()返回的值。另一种方法是在脚本的任何位置打印变量。有没有什么方法可以用更像Python的方式把它送回?

脚本的命名方法如下:

1
folder=$(python create_folder.py"string_as_arg")

一个更为Python式的方法是避免bash,并用python编写全部内容。

你不能指望bash有一种从另一个过程中获取价值的Python式方法——它的方法是bash方法。

bash和python在不同的进程中运行,进程间通信(IPC)必须通过内核进行。有许多IPC机制,但是bash不支持它们(例如共享内存)。这里的最小公分母是bash,所以您必须使用bash支持的,而不是Python支持的(Python拥有一切)。

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

从bash使用的机制是从子进程中捕获stdout,所以python必须使用print。在盖子下面使用匿名管道。您可以使用一个命名管道(也称为FIFO),Python会将其作为普通文件打开,并对其使用write。但不会给你带来太多。


如果您在bash中工作,那么您可以简单地做到:

1
export var="value"

但是,在Python中没有类似的功能。如果您尝试使用os.environ,这些值将在流程的其余部分保持不变,并且在程序完成后不会修改任何内容。你最好的办法就是做你已经做过的事情。


您可以尝试在python代码中设置一个环境变量,然后在bash脚本中从外部读取它。这种方式在我看来很优雅,但绝对不是"完美的解决方案"或唯一的解决方案。如果您喜欢这种方法,这个线程可能很有用:如何在Python中设置环境变量

还有其他的方法,非常类似于你所做的。还要检查这个线程:在bash脚本中存储python脚本的返回值


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

1
2
3
4
5
6
import sys

[...]

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