2012-09-29 7 views
2

subprocess.Popen을 사용하여 파이썬에서 pandoc을 호출하는 데 문제가 있습니다. 그것은 모두 콘솔에서 작동합니다. 여기에 코드가 있습니다.subprocess.Popen을 사용하여 파이썬에서 pandoc 호출하기

import subprocess 
fileout = os.path.splitext(filename)[0] + ".pdf" 
args = ['pandoc', filename, '-o', fileout] 
subprocess.Popen(args) 

가 나는 또한 오류를 캡처하기 위해 다양한 방법을 시도했지만 문제가 해결되지 않은 :

# Test markdown file 
here is just a simple markdown file. 

이제 내 파이썬 코드는 filename 전체 경로 내 인하 파일인지 사용. 콘솔에서, 그러나, 모든 것이 제대로 실행 :

pandoc '[filename]' -o '[fileout]' 

답변

3

잘 작동해야하지만, 당신이 subprocess.check_call 아니라 직접 subprocess.Popen 이상 사용 끝날 때까지 대기 할 수 있습니다 또한

subprocess.check_call(args) 

이를 을 성공적으로 완료했는지 확인하십시오.. 상태 코드가 0이 아니면 예외를 throw합니다.

1

Popen 호출로 인해 stdout 및 stderr을 캡처하려면 PIPE를 communicate()와 함께 사용해야합니다.

from subprocess import Popen, PIPE 

fileout = os.path.splitext(filename)[0] + ".pdf" 
args = ['pandoc', filename, '-o', fileout] 
stdout, stderr = Popen(args, stdout=PIPE, stderr=PIPE).communicate() 
5

이 (/ 당신은 특별히 할 수 있습니다 subprocess.Popen를 사용하여 pandoc를 호출 할 필요) 귀하의 질문에 대답하지 않고 Pyandoc라는 Pandoc에 대한 파이썬 래퍼가 : 내 대답 here를 참조하십시오.

1

PIPE을 사용하는 것이 좋지 않습니다. 더 복잡하고 subprocess에있는 파이썬 문서는 필요하지 않은 경우 사용하지 않는 것이 좋습니다 (section 17.1.1 참조).

나를 위해 작동합니다 (from Markx). 문제가 예외가 있었다면

def pandoc(filename, extension): 
    # TODO manage pandoc errors, for example exit status 43 when citations include Snigowski et al. 2000 
    options = ['pandoc', filename + '.md', '-o', filename + extension] 
    options += ['--ascii', '-s', '--toc'] # some extra options 
    options += ['--variable=geometry:' + 'a4paper'] # to override the default letter size 
    print options # for debugging 
    return subprocess.check_call(options) 

제기에서 :

파일명 원하는 출력 (.pdf, .docx)에서 .md없는 인하 파일의 이름 및 확장이다. 예외 대신 상태 코드를 가져 오려면 check_callcall으로 바꿔야하지만 docs을 참조하십시오.

인용문을 사용하려면 bibliography 옵션을 사용하여 Markx 프로젝트의 원본 구현을 확인하십시오.

관련 문제