【问题标题】:Using subprocess to execute command while in a class python在类python中使用子进程执行命令
【发布时间】:2017-05-30 18:10:32
【问题描述】:

您好,我在 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 循环中分离出来并手动传递标题,但这也没有奏效。

我在该 for 循环中创建的所有其他文件都可以正常工作,并且我仅使用这些文件单独运行子进程代码(在仅包含该代码的 .py 文件中),然后它可以正常工作。我想知道是否有人知道尝试在导致此问题的类中运行它是否存在问题,或者我是否只是遗漏了一些东西。

【问题讨论】:

    标签: python python-2.7 tkinter subprocess exe


    【解决方案1】:

    好的,我不确定回答我自己的问题有多好,我保证在发布问题之前我已经尝试让它工作了一段时间。

    但我所做的只是将目录添加到命令中的文件中,这无关紧要,因为它们始终位于同一目录中。所以改成:

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

    这段代码现在可以工作了(我也意识到我之前错误地复制了我的代码,并且字符串中的“col”不起作用)。

    编辑:我现在意识到,因为我正在运行的 .py 文件不在 C:\X12 目录中,所以该命令正在我的 .py 文件目录中查找适当的文件,而不是在目录中可执行文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-19
      • 2019-06-21
      • 1970-01-01
      • 2018-12-15
      • 2018-02-07
      • 2014-08-06
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多