【发布时间】:2012-04-06 07:15:15
【问题描述】:
我想有一种方法可以同时做三件事:
创建一个运行 vsvars32.bat(Visual Studio 批处理文件)的子进程
-
在这个子进程中设置环境变量。例如在一个cmd行中:
- SET MYDIR = C:\This\this\here
- SET DIR = %MYDIR%
- 设置路径 = %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 = ['-Name', '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。
【问题讨论】:
-
你得到的错误信息是什么?请始终提供完整的回溯。
-
"错误:在 C:\...\MyPerl.pl 第 317 行的 %MYDIR%/files/scripts 中找不到 FileX.pl。" *显示 %% 而不是真正的 Path = DIR+/files/scripts。并且文件在这个目录中。
标签: python perl batch-file cmd subprocess