NameError:未使用基于Ant的框架批处理文件定义名称'buffer'

问题描述 投票:1回答:1

我正在使用python脚本执行基于Ant的框架批处理文件(Helium.bat)

subprocess.Popen('hlm '+commands, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

但是,脚本在执行.bat文件时将始终停止并显示以下错误:

import codecs
  File "C:\Python25\lib\codecs.py", line 1007, in <module>
    strict_errors = lookup_error("strict")
  File "C:\Python25\lib\codecs.py", line 1007, in <module>
    strict_errors = lookup_error("strict")
  File "C:\Python25\lib\encodings\__init__.py", line 31, in <module>
    import codecs, types
  File "C:\Python25\lib\types.py", line 36, in <module>
    BufferType = buffer
NameError: name 'buffer' is not defined

如果我直接在命令行上执行.bat,将不会有任何问题。

python windows batch-file python-2.5
1个回答
1
投票

我认为至少部分问题是您如何执行批处理文件。试试看:

# execute the batch file as a separate process and echo its output
Popen_kwargs = { 'stdout': subprocess.PIPE, 'stderr': subprocess.STDOUT,
                 'universal_newlines': True }
with subprocess.Popen('hlm '+commands, **Popen_kwargs).stdout as output:
    for line in output:
        print line,

此向Popen传递了不同的参数-不同之处在于此版本删除了批处理文件中不需要的shell=True,设置了stderr=subprocess.STDOUTstdout重定向到stdout所要到的相同位置为避免丢失任何错误消息,并添加universal_newlines=True以使输出更具可读性。

[另一个不同之处在于,它读取并打印了Popen进程的输出,这将有效地使运行批处理文件的Python脚本等待其执行完毕再继续执行-我认为这很重要。

© www.soinside.com 2019 - 2024. All rights reserved.