【问题标题】:How to Redirct QProcess StandardOutput如何重定向进程标准输出
【发布时间】:2021-03-15 18:14:23
【问题描述】:

我正在使用QProcess 的两个实例。在我的代码的某些部分,我需要 process1 将其输出重定向到 process2
通过遵循 Qt 文档,我可以使用 QProcess.setStandardOutput(),这很棒。但是,稍后我必须在代码中禁用它。 如何将其输出重定向到默认行为(stdout)?我试过process1 = QProcess(),但没用。

process1 = QProcess()
process2 = QProcess()
process1.setStandardOutputProcess(process2)
process1.start("command1")
process2.start("command2")

process1.setStandardOutputProcess(QProcess())
有效,但这是重新划分的正确方法吗?还是我在创建一个新的“uneccessry”对象?

【问题讨论】:

  • 根据您对我的回答的评论(我没有测试),我认为在进程运行时无法禁用它(可能是错误或预期但未记录的行为) .鉴于此,我认为您指出的解决方法是最合适的解决方案。建议你举报。也许 Qt 开发人员应该验证被重定向到的 QProcess 不是 nullptr。
  • @eyllanesc 会的。

标签: python-3.x qt pyqt5 pyside2 qprocess


【解决方案1】:

Qt 错误跟踪器上将此报告为错误后。

我收到以下回复:

这是 Qt 的一个限制, QProcess::setStandardOutputProcess(Qprocess *destination) 期望 非空指针;它不打算在运行时更改。

我对这个问题的解决方法是使用process1.setStandardOutputProcess(QProcess())

编辑
我问有没有变通办法,收到如下回复

有推荐的解决方法吗?

他回复了

没有。它的设计不允许更改设备 (因为很可能涉及到 I/O 缓冲区)。 同样,当做类似的事情时

ls -l | fgrep "bla"

在shell中,没有办法改变第二个进程 飞行途中也一样。

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2011-01-10
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2023-04-05
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多