2017-04-07 5 views
0
를 사용하는 비 파이썬 스크립트를 실행하는 데 실패

내 Python3 유틸리티 (그것이 그 다음 pdflatex 스크립트를 성공적으로 비 파이썬을 실행할 수 있습니다 선택한 디렉토리 내에 배치하지 않는 이상) 작동하지 않는 기능이 있습니다 . 내가 가지고있는 template.tex 파일의 설정 위치에서 유틸리티를 실행하고 싶습니다. 다른 위치에 저장되어 있습니다.파이썬 유틸리티가 성공적으로 상대 경로

파이썬 유틸리티는 예를 들어, 사용하여 사용자의 선택 pdflatex 스크립트를 실행하는 tkinter.filedialog GUI를 사용하여 절대 경로에서 pdflatex 템플릿 파일을 선택하라는 메시지를 표시합니다 os.system("pdflatex /afullpath/a/b/c/mytemplate.tex")

파이썬의 os.system 실행 pdflatex, 어떤 그런 다음 mytemplate.tex 스크립트를 실행합니다. mytemplate.tex./d/another.tex 같은 상대 경로로 작성된 다양한 입력을 가지고있다.

그래서, 파이썬 유틸리티가 좋은만큼이 사용자가 선택하는 /afullpath/a/b/c/mytemplate.tex과 동일한 경로의 작동합니다. 그렇지 않으면 pdflatex는 자신의 입력 파일을 발견 할 수 없다. 실행 경로는 파이썬 스크립트가 아닌 pdflatex 스크립트를 기준으로하기 때문에 ! LaTeX Error: File ./d/another.tex not found : pdflatex 같은 오류 메시지를 제공합니다.

내가 스택 오버플로에 다음과 유사한 사례를 발견 [필요에 따라 그 .tex 파일이있는 폴더, 주위에 이동 얻을 때문에 pdflatex은. 상대 경로를 사용해야합니다,하지만 난 대답은 생각하지 않는다 당신의 mytemplate.tex 파일 pdflatexmytemplate.tex가에 위치한 것과 같은 디렉토리에서 실행된다고 가정하면 (그리고 필요)되어, ./d/another.tex처럼 상대 경로로 다른 파일을 참조하여 Relative Paths In Python -- Stack Overflow

답변

1

당신은 따라서 필요 :이 상황에 맞도록. 0을 포함하는 디렉토리로 변경하여이 요구 사항을 만족시킨다.os.system 호출하기 전에 :

subprocess.call(['pdflatex', input_file], cwd=os.path.dirname(input_file)) 
+1

좋은 생각이다. – Rishav

1

사용 subprocess.run 대신 os.system :

input_file = '/afullpath/a/b/c/mytemplate.tex' 
olddir = os.getcwd() 
os.chdir(os.path.dirname(input_file)) 
os.system('pdflatex ' + input_file) 
os.chdir(olddir) 

더 나은이 당신을 위해 디렉토리의 변화를 처리하고 인용 문제를 쉘에 취약하지 않습니다으로, subprocess.call을 사용하는 것입니다 및 라텍스 스크립트의 디렉토리와 cwd 매개 변수에 전달합니다.

여기에서 subprocess.run 문서를보고 매개 변수는 subprocess.Popen입니다.

예 : 나는 파이썬 자신의 작업 디렉토리를 변경 생각하지 않는다

subprocess.run(["pdflatex", "/afullpath/a/b/c/mytemplate.tex"], cwd="/afullpath/a/b/c/")