我希望有一种方法可以同时做三件事:
创建运行vsvars32.bat(visual studio批处理文件)的子进程
在此子流程中设置环境变量。例如,在cmd行中:
- SET MYDIR = C:\ This \ this \ here
- SET DIR =%MYDIR%
- SET PATH =%DIR%\ bin;%PATH%
同样在这个子进程中调用带有参数的perl脚本。在cmd:
- 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。
答案 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)
的问候,