python - 如何从 Python 脚本返回一个值作为 Bash 变量?

标签 python bash return-value program-entry-point

这是我的代码摘要:

# 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 有一种 Python 式的方式从另一个进程获取值 - 它就是 bash 方式。

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

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

您从 bash 使用的机制是捕获子进程的标准输出,因此 python 必须 print。这在幕后使用了一个匿名管道。您可以改用命名管道(也称为 fifo),python 会将其作为普通文件打开并向其写入。但这不会给你带来太多好处。

关于python - 如何从 Python 脚本返回一个值作为 Bash 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031505/

相关文章:

python - Pandas pivot_table 多个 aggfunc

php - sed 将文件名视为模式?

linux - 如何在 "set -o posix"之后取消 posix 模式?

python - 如何通过 TLS 1.2 运行 django runserver

python - 是否可以使用 python 抓取 html 伪元素中包含的数据?

python - 在 python 中从现有的谷歌计算引擎连接谷歌数据存储

bash - 在不同文件的不同位置删除包含给定字符串的行

java - 为什么不需要将方法的返回值分配给变量?

sql - 从函数返回 CASE 表达式的聚合

java - 理解 try catch finally 及其返回值