如何设置环境变量并使用python subprocess.popen中的参数调用perl脚本?

时间:2012-03-21 17:59:07

标签: python perl batch-file cmd subprocess

我希望有一种方法可以同时做三件事:

  1. 创建运行vsvars32.bat(visual studio批处理文件)的子进程

  2. 在此子流程中设置环境变量。例如,在cmd行中:

      
        
    • SET MYDIR = C:\ This \ this \ here
    •   
    • SET DIR =%MYDIR%
    •   
    • SET PATH =%DIR%\ bin;%PATH%
    •   
  3. 同样在这个子进程中调用带有参数的perl脚本。在cmd:

  4.   
        
    • cd%MYDIR%\ SOURCE \ FILES
    •   
    • My_Perl.pl -Name Mac -owner -details -vs_version 2005 -Run_type rebuild
    •   

    我在python中创建了一个代码:

      

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

         

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

         

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

         

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

         

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

    问题是函数subprocess.popen无法识别myenv值和perlValues。

1 个答案:

答案 0 :(得分:1)

尝试将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)

另外,在执行perl脚本之前忘记了cd。

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

的问候,