这是代码摘要:
# 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")
答案 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