如何从python脚本中设置evn bash命令

如何从python脚本中设置evn bash命令,python,bash,automation,Python,Bash,Automation,我正在努力做到以下几点: setenv PRJ_ROOT /home/to/proj_dir setenv VAR1 /home/user/john/to/proj_dir/design_files setenv VAR2 /home/user/john/to/proj_dir/model_files .... .... .... setenv VARN /home/user/john/to/proj_dir/random_files 因此,如果我在一个文件中有上述所有命令,比如setup,我

我正在努力做到以下几点:

setenv PRJ_ROOT /home/to/proj_dir
setenv VAR1 /home/user/john/to/proj_dir/design_files
setenv VAR2 /home/user/john/to/proj_dir/model_files
....
....
....
setenv VARN /home/user/john/to/proj_dir/random_files
因此,如果我在一个文件中有上述所有命令,比如setup,我可以简单地调用sourcesetup来设置所有env变量。但现在我想让它在路径方面更通用

我尝试了subprocess.call和os.environ来设置路径,但没有成功。我的代码如下。我对python非常陌生,并试图在这项技能的基础上发展,请指导

!/usr/bin/python 导入操作系统 导入子流程 cmd1=setenv VAR1路径 cmd2=setenv VAR1路径 ... ... ... path=os.getcwd var1Path=path+“/design\u文件” var2Path=path+“/model\u文件” ... ... ... 试试1 os.environ['VAR1']=var1Path os.environ['VAR2']=var2Path .... .... 试试2 subprocess.callcmd1,shell=True 或 subprocess.callcmd1,shell=True,executable='/bin/bash' 或 子进程调用['/bin/bash','-i','-c',cmd1] 或 subprocess.Popen['/bin/sh',cmd] 注意:同时尝试了/bin/sh和/bin/bash 预期结果: 在运行脚本之后,如果我执行echo$VAR1,则输出应该是完整的路径

实际结果:

/bin/sh: setenv: command not found
(or)
bash: setenv: command not found
setenv在bash shell中不是有效的关键字,请尝试导出

以下是一些帮助:


我想你是在混贝壳。”setenv'是csh的一部分,而不是bash的一部分

如果我理解您的需求,那么您希望在python进程的环境中设置一些变量,并使它们可供子进程使用

以下是一个例子:

#!/usr/bin/python
import os
import subprocess

path=os.getcwd()

var1Path=path+'/design_files'
var2Path=path+'/model_files'

os.environ['VAR1']=var1Path
os.environ['VAR2']=var2Path

cmd1='echo $VAR1 $VAR2'
print 'cmd1='+cmd1
subprocess.call(cmd1,shell=True)
结果是:

echo $VAR1 $VAR2
/var/tmp/design_files /var/tmp/model_files

子进程知道bash变量。

我认为您的目的可能是在父进程的环境中设置变量,这是不可能的

其他答案显示了如何为孩子们设置它们

因此,如果您想设置当前bash的环境变量,您可以创建一个脚本来吐出这些句子,然后对它们进行求值

$ ./setenv.py
export VAR1=path
export VAR2=path
然后

我们可以添加函数setenv{export$1=$2;}
$ eval $(./setenv.py)