Python: NameError: имя 'buffer' не определено в пакетном файле платформы на основе Ant - PullRequest
1 голос
/ 13 декабря 2010

Я использую скрипт 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 непосредственно в командной строке, проблем не будет.

1 Ответ

1 голос
/ 13 декабря 2010

Я думаю, что, по крайней мере, часть проблемы в том, как вы выполняете командный файл.Попробуйте:

# 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.STDOUT, который перенаправляетstdout в том же месте, куда собирается stdout, чтобы не пропустить ни одного сообщения об ошибке, и добавляет universal_newlines=True, чтобы сделать вывод более читабельным.

Другое отличие заключается в том, что он читает и печатает вывод из Popen процесс, который фактически заставит скрипт Python, выполняющий пакетный файл, дождаться его завершения, прежде чем продолжить - что я подозреваю, важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...