Как установить сценарии bash в сценариях python, а не использовать отдельные сценарии?
Вот как я запускаю скрипт bash, установленный в myscript.sh
#!/bin/bash
import subprocess
child = subprocess.Popen(['bash', '-c', '/bin/bash myscript.sh'], stdout = subprocess.PIPE)
output=child.communicate()
print(output)
myscript.sh
Почему я это делаю, потому что скрипт bash, который мне нужно запустить, не имеет команды экспорта, поэтому я повторяю здесь. Код ниже. Я знаю, что эхо не установит переменную окружения, но я просто хочу вывести его и извлечь значение, поэтому эхо вместо экспорта.
#!/bin/bash
source ia_servers
echo $IA_SRV_cs68_64
Где, $ IA_SRV_cs68_64
Вот файл ia_servers, в котором перечислены значения переменных, он выглядит примерно так
IA_SRV_cs68_64="ds1 ds2 ds3 ds5 "
Вот как переменные в нем. Многие другие переменные установлены в нем исключены, потому что слишком долго.
TESTED хорошо работает с терминала:
- источник ia_servers
- эхо IA_SRV_cs68_64
печатает нужные значения
Проблема: хотя myscript.sh работает и печатает переменные. Что я хочу, так это то, что я не хочу создавать отдельный файл, написать сценарий bash для отображения переменной, как в myscript.sh, но вместо этого записать его в python.
Как мне сделать это внутри питона, а не сделать файл сценария и запустить его.
2 ответа
Вот универсальный способ запуска любого вида скрипта или программы, где программный ввод встроен в скрипт Python.
import subprocess
scriptres = subprocess.Popen("/bin/bash",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate(r'''
# your bash script here
ls
pwd
source whatever
echo $SOMETHING
''')
script_stdout = scriptres[0]
script_stderr = scriptres[1]
# i assume there is a file by name `ia_servers` with variable IA_SRV_cs68_64="ds1 ds2 ds3 ds5 "
import imp
ia_servers =imp.load_source('ia_servers', 'path to `ia_servers` file')
print ia_servers.IA_SRV_cs68_64 # this should print `ds1 ds2 ds3 ds5`