2010-12-13 3 views
1
내가 그러나 개미 기반의 프레임 워크 배치 파일 (Helium.bat)

파이썬 : 나가서 설명하자면 NameError : 이름이 '버퍼'개미 기반 프레임 워크 배치 파일

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 

을 내가 명령 줄에서 직접 박쥐를 실행하면, 어떤 문제가되지 않습니다.

답변

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을 제거 같은 장소에 표준 출력에 stdout 리디렉션 stderr=subprocess.STDOUT는 것입니다 설정입니다 를 사용하여 오류 메시지가 누락되지 않도록하고 universal_newlines=True을 추가하여 출력을보다 읽기 쉽게 만듭니다.

또 다른 차이점은 Popen 프로세스의 출력을 읽고 출력한다는 것입니다.이 프로세스는 계속 진행하기 전에 실행이 끝날 때까지 배치 파일을 실행하는 Python 스크립트를 효과적으로 대기시킵니다.

+0

@BiX : codecs.py에 SyntaxError가있을 가능성은 매우 낮습니다. codecs.py의 코드 행에 '입력시 사용할 수있는 대안이 없습니다.' '' ''여야합니다. 파이썬을 업그레이드 한 후에 다시 설치해야하기 때문에 Glade 'ImportError'를 얻게 될 것입니다 (표준 파이썬 라이브러리 모듈은 아닙니다). – martineau

+0

python 스크립트에서 명령 줄을 실행하는 대신 명령 줄에서 배치 파일을 사용하면 이러한 오류가 발생하지 않습니다. 슬프게도 나는 빈틈을 여러 번 다시 설치하려고 시도했지만 여전히 작동하지 않았습니다./ – BiX

+0

@BiX : 나는 그것이 당신이하고있는 일임을 깨닫지 못했습니다. 질문을 업데이트하여 배치 파일을 어떻게 실행하는지 표시하십시오. 적어도 문제의 일부일 수도 있습니다. – martineau

관련 문제