将Python3变量传递给C Shell脚本

0 投票
1 回答
620 浏览
提问于 2025-04-17 22:41
import os
...
new_variable = 'foobar'
os.environ['new_variable'] = new_variable
return new_variable

我花了好几个小时研究这个问题,但一直没找到答案。不过似乎很多人都有类似的问题。我希望能从社区得到一些帮助。;)

我有一个Cshell脚本,需要从中调用一个Python3脚本。同时,我还要传递一个变量。

#!/bin/csh -f

set variable = value
/../geos.py $variable  

到目前为止一切都很好。在我的Python3脚本中,我接收这个变量,进行一些计算,然后想把计算得到的'new_variable'传回到同一个C shell脚本,以便继续处理我的数据。

我的实际目标是让我的C Shell脚本:

#!/bin/csh -f

set variable = value
/../geos.py $variable  

echo $new_variable

不要返回'未定义变量'。所以显然我的代码不工作。当然,我可以暂时把Python的计算结果保存到一个文件里,但这听起来不太靠谱。而且,我知道通过子进程无法直接修改shell的环境变量,但我只是想传递一个普通变量。应该有办法吧?如果可以的话,我还没找到用subprocess.check_call的解决方案。我漏掉了什么吗?

编辑:

非常感谢。

我知道一定有简单的解决方案。谢谢大家!对于CSHELL,以下代码有效:

set new_variable=`../geos.py $variable`
echo $new_variable

对于BASH,以下代码有效:

new_variable=`../geos.py $variable`
echo $new_variable

在Python脚本中,你只需要把想要的变量输出到标准输出,比如用print(你甚至可以随便命名它们)。不需要os.environ或其他任何东西。这真让我开心,问题解决了!

1 个回答

4

在bash中,我会这样写:

new_variable=$(../geos.py $variable)

让这个Python脚本把新的值输出到标准输出上(也就是用print(new_variable)来打印出来)

在csh中我就不太清楚了,也许你需要用反引号来代替$()?

撰写回答