Как установить сценарии 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` 
Другие вопросы по тегам