【问题标题】:How to pass a python variable to shell scripT [duplicate]如何将python变量传递给shell scripT [重复]
【发布时间】:2020-05-14 01:48:23
【问题描述】:

我有一个带有 first.sh 的 shell 脚本,它在内部调用了一个 python 脚本 second.py。当这个 python 脚本执行时,它会根据某些参数设置一些变量 var='yes'。

现在我需要将此 var 变量传递给它正在调用的 shell 脚本并进行一些处理。请告诉我该怎么做。

我尝试了 os.system('bash') ,但它正在创建新会话并且 shell 脚本的执行没有继续。

【问题讨论】:

    标签: python bash shell unix


    【解决方案1】:

    一个常见的模式是在父进程 (bash) 和子进程 (python) 之间使用文件描述符。在简单的情况下,只使用标准输入/输出。所以 bash 可以读取结果。像这样的:

    #!/bin/bash
    foo=$(python script.py)
    echo "$foo"
    

    如果您需要比单个变量更复杂的东西,您将需要决定数据的一些格式以及如何处理它(可能以 json 格式输出?)

    【讨论】:

    • $( ... ) should be used in place of backticks,全大写名称为 defined by POSIX to be used for variables that modify shell or OS behavior 并且参数扩展应始终使用双引号,即使传递给 echo 时也是如此——参见BashPitfalls #14.
    • 很好的标注。这是一个例子的快速破解。会更新。
    • 但是如果我在python程序中多了一个变量怎么办?
    • @Corework,在我们的知识库中已经有很多可能的方法来做到这一点。就个人而言,我建议复制/proc/self/environ 的格式——使用NUL 分隔的key=value 对——并使用BashFAQ #1 样式的循环将它们读出并分配给关联数组。
    • 如果你安装了jq,你可以输出json格式,然后使用jq解析出你关心的东西。但正如@CharlesDuffy 指出的那样,有很多方法可以做到这一点(数据编组),并且很大程度上取决于您传递的数据类型以及您拥有的工具。
    猜你喜欢
    • 2021-11-30
    • 2021-10-26
    • 2013-11-02
    • 1970-01-01
    • 2012-04-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多