2017-01-15 76 views
0

您好我在Tkinter的我的工作,並建立了一個詢問要打開的文件,然後打開該文件來運行它的代碼框架,使用子進程執行命令,在一類蟒蛇

import subprocess 
import pandas as pd 
import Tkinter as tk 

class MonthlyMenu(tk.Frame): 
    def __init__(self,parent,controller): 
     tk.Frame.__init__(self,parent) 
     self.controller = controller 

     self.browsefile = tk.StringVar() 

     self.fileentry = tk.Entry(self, textvariable = self.browsefile,).grid(row=1,column=1,sticky=tk.W+tk.E) 
     self.submitFile = tk.Button(self,text="Ok",command=self.openFile).grid(row=1,column=2,sticky = tk.W+tk.E) 

    def openFile(self): 
     self.browsefile.get() 
     filename = self.browsefile.get() 

     df = pd.read_excel(filename, sheename="Sheet1",parse_col=0) 
     titles = list(df.columns) 

     for col in titles: 
      sa_command = "C:\\X12\\x12a.exe %s" % (col) 
      process = subprocess.Popen(sa_command,stdout=subprocess.PIPE) 
      process.wait() 

但該代碼運行帶有子進程的可執行文件的最後部分未運行。循環中還有其他代碼運行並生成正確的文件來運行該可執行文件,但我不認爲有必要顯示所有內容。我試圖從for循環中打破子進程代碼並手動傳遞標題,但那也沒有奏效。

我在那個for循環中創建的所有其他文件都正常工作,並且我已經使用這些文件自行運行了子進程代碼(在只有該代碼的.py文件中),並且它可以正常工作。我想知道是否有人知道是否是在導致此問題的類中運行它的問題,或者如果我只是缺少一些東西。

回答

1

好的,我不確定回答我自己的問題有多好,我保證在發佈問題之前我一直試圖讓它工作一段時間。

但我所做的只是將該目錄添加到該命令中的文件,這應該不重要,因爲它們始終位於同一目錄中。因此,將其更改爲:

sa_command = "C:\\X12\\x12a.exe C:\\X12\\%s" % (col) 

該代碼將現在的工作(我也意識到我複製我的代碼之前不正確和有不工作的字符串內「山口」)。

編輯:我現在意識到,因爲我運行的.py文件不在C:\ X12目錄中,該命令正在尋找我的.py文件的目錄中的相應文件,而不是在目錄中與可執行文件。