如何从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)