【问题标题】:How to set environment variables and call a perl script with parameters in python subprocess.popen?如何在 python subprocess.popen 中设置环境变量并使用参数调用 perl 脚本?
【发布时间】:2012-04-06 07:15:15
【问题描述】:

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

  1. 创建一个运行 vsvars32.bat(Visual Studio 批处理文件)的子进程

  2. 在这个子进程中设置环境变量。例如在一个cmd行中:

    • SET MYDIR = C:\This\this\here
    • SET DIR = %MYDIR%
    • 设置路径 = %DIR%\bin;%PATH%
  3. 也在这个子进程中调用带有他的参数的 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


【解决方案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

只需尝试打印出环境,看看环境是否已填充:

 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)

问候,

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2020-04-05
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2012-01-12
    相关资源
    最近更新 更多