raw_input不会通过subprocess和pyqt4线程进行处理

时间:2017-02-01 20:59:27

标签: multithreading subprocess stdin qthread

我已经搜索了几天试图解决这个问题,但虽然很多答案都有帮助,但似乎没有人能指出我遇到的问题。

我正在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行。

感谢任何帮助。

0 个答案:

没有答案