Запуск скриптов, целью которых является изменение переменных оболочки с помощью subprocess.popen - PullRequest
0 голосов
/ 22 августа 2011

У меня есть серия сценариев, которые я автоматизирую в Python с помощью subprocess.Popen.По сути, я вызываю сценарий A, затем сценарий B, затем сценарий C и т. Д.

Script A устанавливает набор локальных переменных оболочки с такими командами, как set SOME_VARIABLE=SCRIPT_A, set PATH=%SCRIPT_A:/=\;%PATH%.

Тогда сценарии B и C должны иметь последствия этого.В Unix вы бы назвали скрипт A с "source script_a.sh".Эффект длится в текущем командном окне.Тем не менее, subprocess.Popen эффективно запускает новое окно (вид).

Очевидно, subprocess.Popen - это не команда, которую я хочу сделать.Как бы я это сделал?

edit Я попытался проанализировать файл (который содержит все операторы 'set') и передать их как словарь в 'env' в subprocess.Popen, нопохоже, все не сработало ..

Ответы [ 3 ]

0 голосов
/ 23 августа 2011

если 'скрипт A' генерируется другим процессом, вам нужно либо изменить другой процесс, чтобы выходной файл имел формат, который вы можете использовать (import) в своем скрипте Python.или напишите синтаксический анализатор на python, который может переварить переменные из «Script A», установив их в вашем скрипте python.

0 голосов
/ 20 сентября 2011

Если все, что вам нужно, это вызвать серию пакетных файлов с использованием Python, вы можете создать вспомогательный пакетный файл, который будет вызывать все эти пакетные файлы, как этот

call scriptA;
call scriptB;
call scriptC;

и запустите этот вспомогательный командный файл, используя subprocess.Popen

0 голосов
/ 22 августа 2011

Вы можете использовать аргумент env для Popen со словарем Python, содержащим переменные, тогда вам не нужно запускать команду, которая просто устанавливает переменные.

...