我想製作一個python腳本,它將TEX文件轉換爲PDF格式,然後用我的文檔查看器打開輸出文件。Python subprocess.Popen()後跟time.sleep
我第一次嘗試以下操作:
import subprocess
subprocess.Popen(['xelatex', '--output-directory=Alunos/', 'Alunos/' + aluno + '_pratica.tex'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
subprocess.Popen(['gnome-open', 'Alunos/'+aluno+'_pratica.pdf'], shell=False)
這樣,從TEX到PDF轉換工作的很好,但是,因爲它需要一定的時間,執行第二命令(打開的文件與文件瀏覽器)在輸出文件被創建之前。
因此,我試圖讓程序在執行第二個命令之前等待幾秒鐘。以下是我所做的:
import subprocess
import time
subprocess.Popen(['xelatex', '--output-directory=Alunos/', 'Alunos/' + aluno + '_pratica.tex'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(10)
subprocess.Popen(['gnome-open', 'Alunos/'+aluno+'_pratica.pdf'], shell=False)
但是,當我這樣做時,不會創建輸出PDF文件。我不明白爲什麼。唯一的變化是time.sleep命令。它爲什麼會影響Popen過程? 任何人都可以給我一些幫助嗎?
編輯:
我已經按照從浮士德和Paulo卜建議和在兩種情況下的結果是一樣的。
當我運行此命令
subprocess.call('xelatex --output-directory=Alunos/ Alunos/{}_pratica.tex'.format(aluno), shell=True)
...或...這
p = subprocess.Popen(['xelatex', '--output-directory=Alunos/', 'Alunos/' + aluno + '_pratica.tex'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
...的Xelatex程序運行,但不會進行轉換。
奇怪的是,當我直接在shell中運行命令
$ xelatex --output目錄= Alunos/Alunos/name_pratica.tex
...轉換完美的作品。
這裏就是我得到的,當我運行subprocess.call()命令:
$ python my_file.py
Enter name:
name
This is XeTeX, Version 3.1415926-2.4-0.9998 (TeX Live 2012/Debian)
restricted \write18 enabled.
entering extended mode
(./Alunos/name_pratica.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, loaded.
)
*
當我直接寫命令的外殼,輸出是一樣的,但它通過轉換自動執行。 有誰知道爲什麼會發生這種情況? PS:抱歉的格式不對。我不知道如何正確發佈shell輸出。
如果兩個步驟必須同步運行,爲什麼不把它們放在同一個過程中? –
您沒有檢查第一條命令的結果。請檢測一個穩定的方法來了解它是否失敗。很可能它是子進程退出代碼; 'p.wait()'返回它。如果返回值不是0,轉換應該失敗。 – Netch
你不能用bash腳本自動化這個嗎?看起來像完美的西裝。 –