将变量从 Python 传递到 Bash

use*_*964 7 python bash

我正在编写一个 bash 脚本,其中嵌入了一个小的 python 脚本。我想将一个变量从 python 传递给 bash。经过几次搜索,我只找到了基于os.environ.

我只是无法让它发挥作用。这是我的简单测试。

#!/bin/bash

export myvar='first'

python - <<EOF
import os
os.environ["myvar"] = "second"
EOF

echo $myvar
Run Code Online (Sandbox Code Playgroud)

我预计它会输出second,但它仍然输出first. 我的脚本有什么问题?还有什么方法可以在没有的情况下传递变量export


概括

感谢所有的答案。这是我的总结。

嵌入在 bash 中的 python 脚本将作为子进程运行,根据定义,它不能影响父 bash 环境。

解决方案是从 python 中传递赋值字符串eval,然后在 bash 中传递。

一个例子是

#!/bin/bash
a=0
b=0

assignment_string=$(python -<<EOF
var1=1
var2=2
print('a={};b={}'.format(var1,var2))
EOF
)

eval $assignment_string

echo $a
echo $b
Run Code Online (Sandbox Code Playgroud)

agc*_*agc 5

  1. 除非使用Python对原始数据进行某种操作,否则不需要导入任何东西。答案可能很蹩脚:

     myvar=$(python - <<< "print 'second'") ; echo "$myvar"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 假设由于某种原因需要Python吐出一堆bash变量和赋值,或者(小心地)即时编写代码。一个eval方法:

     myvar=first
     eval "$(python - <<< "print('myvar=second')" )"
     echo "$myvar"
    
    Run Code Online (Sandbox Code Playgroud)