2017-01-15 129 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文件的目录中的相应文件,而不是在目录中与可执行文件。