从单独的窗口python获取子进程的输出

2024-04-23 11:49:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个程序,让用户选择各种选项,这些选项将有助于命令在python中的单独窗口中运行。在这个子进程完成后,我希望它退出并返回特定命令的输出。下面是我的代码片段:

if(fileName == "" or className == ""):
    tkMessageBox.showinfo("Error", "Please select a test class/test!")
else:
    command = "ctetest"
    if(verbose.get()):
        command += " -v"
    if(xml.get()):
        command += " -x"
    if(version.get()):
        command += " -V"
    if(output.get()):
        command += " -o"
    command += " RegressionTest/"
    command += folderName + " " + fileName + "." + className + "." + methodName
    processOutput = subprocess.Popen('start '+command, shell = True)
    processOutput.wait()
    processOutput.terminate()

问题是,当子进程完成时,它只是挂在那里,我必须手动关闭它。一旦我手动关闭它,它似乎不会生成子进程生成的任何输出。我试过用

^{pr2}$

以及

^{3}$

但同样的问题也出现了。我唯一能想到的解决办法是使用线程,但是在我终止它之前,我如何检查子进程是否真的完成了呢?我还有别的办法可以完成这个任务吗?提前谢谢!在


Tags: or代码用户test命令程序getif
1条回答
网友
1楼 · 发布于 2024-04-23 11:49:45

subprocess需要您传递的参数与您所做的不同,您需要创建一个由要运行的程序及其参数组成的列表。例如["ls", "-l", "/home"]。在

你的代码应该是:

if(fileName == "" or className == ""):
    tkMessageBox.showinfo("Error", "Please select a test class/test!")
else:
    command = ["start ctetest"]
    if(verbose.get()):
        command.append("-v")
    if(xml.get()):
        command.append("-x")
    if(version.get()):
        command.append("-V")
    if(output.get()):
        command.append("-o")
    commandpath = "RegressionTest/" + folderName + " " + fileName + "." + className + "." + methodName
    command.append(commandpath)
    processOutput = subprocess.check_output(command, shell=True)

这将使用list.append()创建命令和参数列表。它将自动等待子进程完成,并在processOutput变量中提供整个输出。在

相关问题 更多 >