Как установить переменные окружения и вызвать Perl-скрипт с параметрами в python subprocess.popen? - PullRequest
0 голосов
/ 21 марта 2012

Мне бы хотелось иметь метод для одновременного выполнения 3-х действий:

  1. Создать подпроцесс, который запускает vsvars32.bat (пакетный файл visual studio)

  2. В этом подпроцессе задайте переменные среды. Например, в строках cmd:

    • SET MYDIR = C: \ This \ this \ here
    • SET DIR =% MYDIR%
    • SET PATH =% DIR% \ bin;% PATH%
  3. Также в этот вызов подпроцессаскрипт perl с его параметрами.в cmd:

  • cd% MYDIR% \ SOURCE \ FILES
  • My_Perl.pl -Имя Mac-владелец -details -vs_version 2005 -Run_typeперестроить

Я создал код на python:

myenv = {'MYDIR': 'C: \ This \ this \ here', 'DIR': '% MYDIR%', 'PATH': '% DIR% \ bin;% PATH%'}

batchCmd = 'c: /.../ vsvars32.bat'

perlCmd= 'c: /.../ MyPerl.pl'

perlValues ​​= ['-Name', 'Mac', '-owner', '-details', '-vs_version', '2005','-Run_type', 'rebuild']

process = subprocess.Popen (['cmd', '/ c', batchCmd, '&&', perlCmd, perlValues], shell = False, stdin = подпроцесс.PIPE, stdout = subprocess.PIPE, env = myenv)

Проблема в том, что функция subprocess.popen не распознает значения myenv и perlValues.

1 Ответ

1 голос
/ 22 марта 2012

Попробуйте добавить perl.exe в perl cmd.

perlCmd = 'C:\perl\perl.exe c:/.../MyPerl.pl'

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

 myenv = {'MYDIR' : 'C:\This\this\here', using backslash
 '%DIR%\bin;%PATH%'} using slash

Просто попробуйте распечатать env, чтобы убедиться, что среда заполнена или нет:

 process = subprocess.Popen(['cmd','/c', 'set'], shell=False, stdin = subprocess.PIPE, stdout = subprocess.PIPE, env = myenv)

Кроме того, вы забыли cd перед выполнением сценария perl.

process = subprocess.Popen(['cmd','/c', batchCmd ,'&&', 'cd %MYDIR%\SOURCE\FILES', '&&', perlCmd, perlValues], shell=False, stdin = subprocess.PIPE, stdout = subprocess.PIPE, env = myenv)

С уважением,

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