将Python3变量传递给C Shell脚本
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中我就不太清楚了,也许你需要用反引号来代替$()?