2011-02-02 3 views
6

일부 작업을 수행하기 위해 응용 프로그램 pdftk을 몇 번 사용하는 Python 스크립트를 코딩하고 있습니다.Python : os.system()을 사용하여 파일을 열지 못했습니다.

예를 들어,이 같은 두 개의 PDF 파일을 병합 윈도우 명령 행 쉘에서 pdftk 사용할 수 있습니다

pdftk 1.pdf 2.pdf cat output result.pdf 

내가 내 파이썬 스크립트의 중간에 위의 작업을 수행하고 싶습니다. 여기에 내가 어떻게 했는가 :

os.system('pdftk 1.pdf 2.pdf cat output result.pdf') 

위의 pdftk 명령은 Windows 쉘에서 완벽하게 작동합니다. 그러나 Python의 os.system()을 사용하여 입력 파일을 실행하려고 할 때 입력 파일 (1.pdf 및 2.pdf)을 열지 못합니다.

Error: Failed to open PDF file: 1.pdf

Error: Failed to open PDF file: 2.pdf

왜 발생합니까 : 여기에 내가 pdftk에서 얻을 오류 메시지가 때 파이썬의 os.system()을 사용하여 명령을 실행하려고? 어떻게 해결할 수 있습니까?

참고 : PDF 파일을 Python과 병합하는 더 좋은 방법이 있다는 것을 알고 있습니다. 제 질문은 PDF 파일을 병합하는 것이 아닙니다. 그것은 단지 장난감의 예일뿐입니다. 내가 성취하고자하는 것은 Python을 사용하여 pdftk 및 다른 명령 행 응용 프로그램을 실행할 수있는 기능입니다.

+4

디렉토리 경로와 관련된 문제는 거의 확실합니다. 'C : \'또는 어디에서든지 전체 경로를 전달하거나 올바른 디렉토리에서 시작하는지 확인할 수 있습니다. – chmullig

+0

인용 또는 셸 변수 보간 문제 일 수도 있습니다. 'os.system' 대신 항상'subprocess' 모듈을 사용하여 이러한 문제를 피하십시오. – Philipp

+3

@chmullig : 너 내가 진짜 바보 같은거야? 글쎄, 내가 누군지 밝혀. 문제는 실제로 경로 문제였습니다. 질문에 대한 대답에서 당신이 말한 것을 반복하면 그것을 받아 들일 것입니다. 감사. – snakile

답변

3
당신은 subprocess와 함께, 등등, 인용 탈출, 및과 (잠재적 인) 문제를 방지 할 수 있습니다

:

import subprocess 

subprocess.call(['pdftk', '1.pdf', '2.pdf', 'cat', 'output', 'result.pdf']) 

그것은처럼 사용하기 쉽습니다을 os.system이며, 인수 목록을 동적으로 작성하는 경우에도 더 쉽습니다.

2

프로세스의 현재 작업 디렉토리를 설정해야합니다. .PDF 파일은 /some/path/to/pdf/files/에 위치하는 경우 :

>>> os.getcwd() 
'/home/vz0' 
>>> os.chdir('/some/path/to/pdf/files/') 
관련 문제