关于以下问题我做了几个小时的研究,但我根本找不到答案。虽然似乎有许多研究员遇到了问题。我希望我能从社区获得一些帮助。 ;)
我有一个Cshell脚本,我需要从中调用Python3脚本。我也传递一个变量。 .csh
#!/bin/csh -f
set variable = value
/../geos.py $variable
到目前为止一切都很好。在我的Python3脚本中,我接受这个变量,进行一些计算,现在想要将'new_variable'传回VERY SAME C shell脚本以继续我的数据集。
的.py
import os
...
new_variable = 'foobar'
os.environ['new_variable'] = new_variable
return new_variable
我的实际目标是我的C Shell脚本:
#!/bin/csh -f
set variable = value
/../geos.py $variable
echo $new_variable
不会返回'未定义的变量'。显然我的代码不起作用。当然,我可能暂时将python计算保存到文件中,但这看起来相当令人难以置信。另外,我知道通过子进程操作shell的环境变量是不可能的,但我仍然只想传递一个普通的变量。应该有一种方式,不是吗? 如果可能的话,我无法使用subprocess.check_call找出任何解决方案。我错过了什么?
E D I T: Merci beaucoup。
我知道一定有一个简单的解决方案。非常感谢! 对于CSHELL,以下代码有效:
set new_variable=`../geos.py $variable`
echo $new_variable
对于BASH,以下代码有效:
new_variable=`../geos.py $variable`
echo $new_variable
在python脚本中,你不需要做任何事情,只需将你想要的变量放到标准输出中,例如打印(you_even_can_name_them_as_you_want)。没有任何必要的os.environ oo。让我的一天。解决
答案 0 :(得分:4)
在bash中我会使用:
new_variable=$(../geos.py $variable)
让python脚本生成标准输出的新值(即print(new_variable)
)
在csh我不知道,也许你不得不使用反引号代替$()?