我的應用程序打開一個pdf文件,用戶的請求(按鈕)os.startfile。當用戶再次按下按鈕時,有什麼辦法可以關閉這個pdf嗎?如果不這樣做,我得到的錯誤:從Python關閉PDF文件或EXE應用程序
WindowsError:[錯誤32]的過程,因爲它正被另一個進程無法訪問文件:「default_report.pdf」
編輯:在Python我得到:
QPainter::begin(): Returned false
(WindowsError來自可執行文件)。我可以通過try
以某種方式捕捉到這個錯誤嗎?至少要求用戶手動關閉pdf ...另一個相關的問題。我的應用程序被編譯爲一個可執行文件,並從另一個VB6應用程序(也在按鈕上)調用。有沒有什麼辦法可以檢測到Python的可執行文件已經在運行(exe文件總是具有相同的位置),並在這種情況下殺死它,然後再次啓動它?問題是類似的,如果我第二次運行可執行文件,因爲他們開始發生衝突(他們使用公共數據庫),我會得到錯誤。從VB6它不以某種方式工作,我不知道細節...
編輯:與
psutil
解決(見我被jheyse答案評論)
附:如果它很重要,我使用Python 3.2,PyQt 4和cx_freeze進行exe生產。
謝謝你的答案。 1.我也看到了這些文檔... 2.這樣我也可以嘗試殺死pdf,對吧?從myproject.exe殺死myproject.exe可能會自殺;)這就是我基本上需要的:如果一個myproject.exe已經在運行,就殺了它。也許有一種方法來檢查它開始時的時間並殺死更早的時間? – Katya 2012-07-18 07:35:44
在再次調用之前,您可以從VB6中終止myproject.exe。有一些方法可以做到這一點:你可以從一個不可見的shell中調用taskkill或使用dlls(windows API),如[here](http://www.andreavb.com/tip020021.html)。此外,我認爲Adobe Reader的新版本在不同的進程中打開PDF文檔,但我不確定... – jheyse 2012-07-18 12:07:48
從Python解決:我檢測到所有''calc.exe'進程和'kill()'一個較小'create_time'。只是工作!再次感謝!問題1沒有解決,但如果這部分沒有出現,我會將問題標記爲今天晚上解決的問題... p.s.我甚至不能依靠PDF來開放Adobe:( – Katya 2012-07-18 14:44:45