Как настроить команду bash из скрипта Python - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь сделать следующее:

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», я могу просто вызвать «source setup», чтобы установить все переменные env. Но теперь я хочу сделать его общим по отношению к пути.

Я пробовал subprocess.call и os.environ, чтобы установить путь, но не добился успеха. Мой код ниже. Я новичок в python и пытаюсь развить это умение, пожалуйста, руководство.

#!/usr/bin/python
import os
import subprocess
cmd1 = "setenv VAR1 path"
cmd2 = "setenv VAR1 path"
...
...
...
path = os.getcwd()
var1Path = path + '/design_files'
var2Path = path + '/model_files'
...
...
...

#try 1
os.environ['VAR1'] = var1Path
os.environ['VAR2'] = var2Path
....
....

#try 2
subprocess.call(cmd1, shell=True)
#(or)
subprocess.call(cmd1, shell=True, executable='/bin/bash')
#(or)
subprocess.call(['/bin/bash','-i','-c', cmd1])
#(or)
subprocess.Popen(['/bin/sh', cmd])

#NOTE: tried both /bin/sh and also /bin/bash

Ожидаемый результат: после запуска скрипта, если я сделаю «echo $ VAR1», вывод должен быть полным путем.

Фактический результат:

/bin/sh: setenv: command not found
(or)
bash: setenv: command not found

Ответы [ 3 ]

1 голос
/ 27 июня 2019

setenv недопустимое ключевое слово в bash shell, попробуйте export

, вот некоторая помощь:

Установка переменных среды в Linux с помощьюBash

0 голосов
/ 28 июня 2019

Я думаю, что вы можете установить переменные в среде родителя, что невозможно .

Другие ответы показывают, как вы можете установить их для детей.

Поэтому, если вы хотите установить переменные окружения вашего текущего bash, вы можете создать скрипт, который плюет предложения, а затем вы оцениваете их.

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

тогда

$ eval $(./setenv.py)
0 голосов
/ 27 июня 2019

Я думаю, ты смешиваешь свои снаряды. '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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...