closeWriteChannel之后的QProcess输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了closeWriteChannel之后的QProcess输出相关的知识,希望对你有一定的参考价值。

如何运行两个命令并查看输出。这样的事情:

process.write('myVar = 2')
process.write('print myVar')

并查看每个命令的输出。如果我做closeWriteChannel看输出,我就不能再与我的进程通信了。这是我的代码:

from PyQt4.QtCore import *
process = QProcess()
process.start('python -i')

process.waitForFinished(100)
process.readAllStandardOutput()

process.write('2+2')
process.closeWriteChannel()
process.waitForFinished(100)
print process.readAllStandardOutput()
答案

当有一些数据可供阅读时,你应该使用readyReadStandardOutputreadyReadStandardErrorQProcess信号得到通知。

如果你想发送两行,你只需要使用换行符分隔它们。

例:

from PyQt4.QtCore import *

app = QCoreApplication([])
process = QProcess()

def read_out():
    print 'stdout:', str(process.readAllStandardOutput()).strip()


def read_err():
    print 'stderr:', str(process.readAllStandardError()).strip()


process.readyReadStandardOutput.connect(read_out)
process.readyReadStandardError.connect(read_err)

process.start('python -i')
process.write('2+2
')
process.write('1+1
')

process.closeWriteChannel()
process.waitForFinished()

app.processEvents()

输出:

stderr: Python 2.7.4 (default, Apr 19 2013, 18:28:01) 
[GCC 4.7.3] on linux2
stderr: Type "help", "copyright", "credits" or "license" for more information.
stderr: >>>
stdout: 4
stderr: >>>
stdout: 2
stderr: >>>

注意:不能保证带有42的行将是两个单独的读取。也可以

stderr: Python 2.7.4 (default, Apr 19 2013, 18:28:01) 
[GCC 4.7.3] on linux2
stderr: Type "help", "copyright", "credits" or "license" for more information.
stdout: 4
2
stderr: >>> >>> >>>

以上是关于closeWriteChannel之后的QProcess输出的主要内容,如果未能解决你的问题,请参考以下文章

重用 QProcess 对象 (Qt 4.8)

SSH 在 QProcess 中不起作用,但在控制台中起作用

javascript ::在JS之后的元素之后或::之前

今年最后一篇

iOS10之后openURL:方法过期之后的替代方法及使用

删除特定列值第一次出现之后(包括)之后的行