2016-11-09 87 views
2

我试图构建一个程序,它启动一个新的命令提示符并运行用户定义的自定义命令。这里是我的代码片段:在Python中的新命令提示符中检索命令的输出

if(fileName == "" or className == ""): 
    tkMessageBox.showinfo("Error", "Please select a test class/test!") 
else: 
    command = ["start","/w","cmd","/c","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") 
    command.append("RegressionTest/" + folderName) 
    command.append(fileName + "." + className + "." + methodName) 
    processOutput = subprocess.check_output(command, shell = True) 
    print processOutput 

我能够在新的命令提示符下运行该命令,然后关闭它,当它完成,但问题是,我没有得到从我的自定义命令的输出,但相反,我从“开始”命令得到的输出是没有的。有没有办法从我的自定义命令中获取输出?提前致谢!

+0

你真的需要打开一个新的CMD窗口,然后运行命令呢?您可以直接运行该命令并重复检查任何输出。 – ForceBru

+0

@ForceBru是的,因为我可能想运行这些命令的多个并在运行时监视它们。我同意如果我直接运行它会更简单,但这会让它变得非常混乱,因为有时我的输出可能会非常长,以至于它会被剪辑,并且块会丢失。 – Ted

回答

0

你不需要多个CMD窗口,只需要一个。

如果您想一次运行多个命令,请使用多线程。

如果担心返回的数据被截断,只需将其输出到文件即可。

像:

if(fileName == "" or className == ""): 
    tkMessageBox.showinfo("Error", "Please select a test class/test!") 
else: 
    command = ["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") 
    command.append("RegressionTest/" + folderName) 
    command.append(fileName + "." + className + "." + methodName) 
    command.append('> %s_test_%s_%s_%s.txt' % (time.time(), fileName, className, methodName)) 
    subprocess.call(command, shell = True) 
+0

但是假设我确实需要一个新窗口,那么我真的无法获得输出?这最终是我的下一步,输出到一个文本文件。但就目前而言,我的自定义命令用于运行测试脚本,在此测试脚本中,我向服务器发送多个命令并监视我可以找回的响应。有时服务器需要一段时间,甚至可能没有回应。我想单独的窗口,以便我可以干净地监视服务器的行为/响应时间。 – Ted

+0

我真的不知道如何在打开新窗口时检索输出,如果不是将它写入文件(或任何数据库)。 但是再次使用多线程,您可以将每个命令输出写入一个csv文件(以及正在测试的类/方法,花费的时间,最终的错误(超时,服务器无法访问...))。只需一眼该csv文件,你可以完美地监视发生了什么。 –