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在不同的进程中运行,进程间通信(IPC)必须通过内核进行。有许多IPC机制,但是bash不支持它们(例如共享内存)。这里的最小公分母是bash,所以您必须使用bash支持的,而不是Python支持的(Python拥有一切)。
没有共享内存,向另一个进程的变量(更不用说另一种语言)写入不是一件简单的事情。调试器可以这样做,但它们是专门为宿主语言编写的。
从bash使用的机制是从子进程中捕获stdout,所以python必须使用
如果您在bash中工作,那么您可以简单地做到:
1 | export var="value" |
但是,在Python中没有类似的功能。如果您尝试使用
您可以尝试在python代码中设置一个环境变量,然后在bash脚本中从外部读取它。这种方式在我看来很优雅,但绝对不是"完美的解决方案"或唯一的解决方案。如果您喜欢这种方法,这个线程可能很有用:如何在Python中设置环境变量
还有其他的方法,非常类似于你所做的。还要检查这个线程:在bash脚本中存储python脚本的返回值
只需使用
1 2 3 4 5 6 | import sys [...] if __name__ =="__main__": sys.exit(main()) |