我已经搜索了几天试图解决这个问题,但虽然很多答案都有帮助,但似乎没有人能指出我遇到的问题。
我正在python中开发一个代码,打开一个测试单元GUI,从所选菜单运行另一个python脚本,并在测试单元的调试视图中显示输出,这是一个简单的QTextEdit窗口。
一切正常,直到python代码中的raw_input应该通过子进程运行。换句话说,如果代码中没有raw_input,一切都很好。但是当我尝试运行具有raw_input的python脚本时,python测试单元代码只是挂在那里等待输入,但输入或消息永远不会显示。
我尝试使用communic(),尝试写入stdin,或者读取输入,但是我得到了错误,或者脚本只是通过并且什么都不做。
我试图测试的两个python脚本是简单的ping测试。一个在脚本中有硬编码的IP地址,另一个有raw_input要求用户输入IP地址,那就是那个不会运行的地址,只是坐在那里等待从未在stdout中显示的输入。
我正在使用子进程尝试实现此目的。这是代码中给我带来问题的部分。此函数位于Qthread内部,运行子进程,并且信号被放置到位以显示ping测试代码中写入的任何print语句。
def _run_script(self):
"""
This function starts the script.
"""
IN()
print "\nInside the thread, running script: ", self.currentScript
print "Started running script thread"
##process = Popen(['python', '-u', self.currentScript], stdout = PIPE, stdin = PIPE, stderr = PIPE)
##process = Popen(['python', '-u', self.currentScript], stdout = PIPE, stdin = open(os.devnull), stderr = PIPE)
process = Popen(['python', '-u', self.currentScript], stdin = PIPE, stdout = PIPE, stderr = PIPE)
while process.poll() is None:
line = process.stdout.readline()
line = line.strip()
print line
self.emit(SIGNAL("update_debug_view(QString)"), line)
##process = Popen(['python', '-u', self.currentScript], stdout = PIPE, stderr = PIPE)
##for xline in iter(process.stdout.readline, ''):
## line = xline.rstrip()
## print line
## self.emit(SIGNAL("update_debug_view(QString)"), line)
print "script run finished..."
errors = process.stderr.readline()
print "Errors: ", errors
self.emit(SIGNAL("check_for_errors(QString)"), errors)
OUT()
我可以把整个代码放在这里,但是有多个文件,有些接近1000行。
感谢任何帮助。