Я пытаюсь написать оболочку python для создания некоторого программного обеспечения. Мне нужно автоматизировать его строительство сотни раз с различными конфигурациями, что означает, что я не могу просто autogen.sh ; ./configure ; make ; make install
. Некоторые из используемых конфигураций требуют запуска скрипта, который условно настраивает некоторые переменные среды. То, что я хочу, чтобы быть в состоянии сделать что-то вроде этого:Python скрипт, который запускает несколько команд оболочки и ждет результата
command = './autogen.sh'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = './script.sh ; ./configure <configure-flags>'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make install'
ret = subprocess.call(command.split())
if ret != 0):
sys.exit(ret)
Проблема я бегу в том, что переменные окружения, установленные в script.sh
не становятся сохранены для configure
. Я видел частичное решение в Sending multiple commands to a bash shell which must share an environment, но это связано с промывкой команд stdin
и опросом результата, который не будет работать, когда у вас действительно длинный makefile (мой занимает около 10-20 минут), и он также не дает вы возвращаете значение, которое мне нужно знать, если сборка была успешной или нет.
Кто-нибудь знает лучший способ сделать это?
Я на самом деле не все, что придирчивый об окружающей среде сохраняется от одного 'вызова()' на другой. Я в порядке с вызовом сценария установки в каждом 'call()'. –
"Что делать, если дочерний процесс печатает' rm -rf/'", что если дочерний процесс просто запускает 'rm -rf /' напрямую? –
@thatotherguy: действительно. :-) Я думаю больше о более крупных системах, которые используют подпозиции, находящиеся в изоляции (разные UID, возможно, даже на другой виртуальной машине и т. Д.) С более узкими каналами связи. – torek