2014-03-06 49 views
1

我使用Python 2.7和Tkinter在Windows中運行控制檯應用程序。我正在使用文件瀏覽器來選擇文件。我的問題是,在用戶選擇文件和使用路徑的腳本之間,Windows試圖打開它。在這種情況下,它是一個.pages文件,它試圖用Word打開它。我不希望發生這種情況。我怎樣才能阻止它>如何禁止使用python處理Windows文件?

只爲背景,這裏的代碼:

from Tkinter import * 
from tkFileDialog import * 
import os.path 
import shutil 
import sys 
import tempfile 
from zipfile import ZipFile 
import subprocess 


class uiclass(): 
    def __init__(self,root): 
     b = Button(root, text="Browse", command=self.callback) 
     w = Label(root, text="Please choose a .pages file to convert.") 
     w.pack() 
     b.pack() 

    def callback(self): 
     print "click!" 
     global y 
     y = askopenfilename(parent=root, defaultextension=".pages") 
     self.view_file(y) 



    def view_file(self,filepath): 
     subprocess.Popen(filepath, shell=True).wait() 

     PREVIEW_PATH = 'QuickLook/Preview.pdf' # archive member path 
     #pages_file = raw_input('Enter the path to the .pages file in question: ') 
     pages_file = y 
     pages_file = os.path.abspath(pages_file) 
     filename, file_extension = os.path.splitext(pages_file) 
     if file_extension == ".pages": 
      tempdir = tempfile.gettempdir() 
      temp_filename = os.path.join(tempdir, PREVIEW_PATH) 
      with ZipFile(pages_file, 'r') as zipfile: 
       zipfile.extract(PREVIEW_PATH, tempdir) 
      if not os.path.isfile(temp_filename): # extract failure? 
       sys.exit('unable to extract {} from {}'.format(PREVIEW_PATH, pages_file)) 
      final_PDF = filename + '.pdf' 
      shutil.copy2(temp_filename, final_PDF) # copy and rename extracted file 
      # delete the temporary subdirectory created (along with pdf file in it) 
      shutil.rmtree(os.path.join(tempdir, os.path.split(PREVIEW_PATH)[0])) 
      print('Check out the PDF! It\'s located at "{}".'.format(final_PDF)) 
      self.view_file(final_PDF) # see Bonus below 
      sys.exit() 
     else: 
      sys.exit('Sorry, that isn\'t a .pages file.') 

if __name__ == '__main__': 
    root = Tk() 
    uiclass(root) 
    root.wm_title("Pages to PDF") 
    root.mainloop() 
+0

是否有可能將問題隔離,以較少代碼段?對於我來說,理解它有點困難因爲全局變量有點奇怪,並且有很多導入的名字。 – icedtrees

+1

不要調用'subprocess.Popen(filepath,shell = True).wait()'if'file_extension ==「.pages」' – jfs

+0

@icedtrees我認爲問題出現在else之前的最後幾行:',其中打開文件的實際代碼是。我不確定... – evamvid

回答

1

正如JFSebastian指出的那樣,我的問題是,它的每一個循環又跑到時間重新打開PDF文檔(因爲該file_extension變量仍設置爲.pages,隨着在手,我做了一些修改是解決了這一問題的代碼。

感謝JF!