2017-01-15 11 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 и вручную передать заголовки, но это тоже не сработало.

Все остальные файлы, которые я создаю в этом цикле, работают правильно, и я сам запускал только код подпроцесса (в .py-файле только с этим кодом) с этими файлами, и он работает правильно. Мне интересно, знает ли кто-нибудь, если это проблема с попыткой запустить его в классе, который вызывает эту проблему, или если я просто что-то пропустил.

ответ

1

Хорошо, я не уверен, насколько хорошо ответить на мой собственный вопрос, и я обещаю, что пытался заставить это работать некоторое время, прежде чем публиковать вопрос.

Но все, что я сделал, это добавить каталог в файл в команде, что не должно иметь значения, поскольку они всегда находятся в одном каталоге. Так изменить его на:

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

Этот код будет работать сейчас (я понял, что я скопировал мой код неправильно раньше и имел «седловины» внутри строки, которая не работает).

EDIT: Теперь я понимаю, что поскольку мой .py-файл, который я запускал, не был в каталоге C: \ X12, команда искала соответствующие файлы в каталоге моего .py-файла, а не в каталоге с исполняемым файлом.