【问题标题】:QProcess doesn't show any output when it runs rsyncQProcess 在运行 rsync 时不显示任何输出
【发布时间】:2023-03-17 23:21:02
【问题描述】:

我在 QProcess 中启动 rsync。如果我使用QProcess::startDetached(),我的进程运行良好(在它自己的终端中),但如果我使用QProcess:start() 启动它,则没有任何反应。问题似乎是 QProcess 显然无法从 rsync 读取消息并将其写入输出窗口。

我已经在构造函数中连接了这个信号。

MainWindow::~MainWindow()
{
    process = new QProcess(this);

    connect( process, SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyReadStandardOutput() ) );
}

点击按钮后我调用:

void MainWindow::onButton1Clicked()
{
    process->start("rsync -a root@10.0.0.1:/path/ /rsync_folder");

    //process->start("ping 10.0.0.01"); // this works for testing and I see output but not the above.
}

当 rsync 启动时,它会打印一条消息并要求输入密码。我的 QProcess 没有收到任何消息,但收到了 ping 消息。这里可能有什么问题?

上面的悲伤行也可以直接在 Windows 7 命令行上运行,但它似乎没有显示 QProcess 的任何进展。

更新

这是我显示输出的方式。

void MainWindow::onReadyReadStandardOutput()
{
    qDebug() << process->readAllStandardOutput();
}

【问题讨论】:

  • 请澄清一下,您如何知道您的应用程序收到了来自ping 命令的消息?除非您通过 readAllStandardOutput 方法从 QProcess 显式读取它们并将其写入日志或其他地方,否则它们不应该是可见的。
  • @olegandriyanove 我已将插槽连接到它,我正在使用qDebug() 打印到输出窗口

标签: c++ qt rsync


【解决方案1】:

http://doc.qt.io/qt-5/qprocess.html#communicating-via-channels

您还记得链接并检查标准错误频道吗?

http://doc.qt.io/qt-5/qprocess.html#readAllStandardError

过去我已经启动了一些 QProcesses,这已经为我解决了这个问题。

我的另一种方法是使用QProcess::startDetached();

希望对您有所帮助。

【讨论】:

  • 使用 startDetached() 你根本不会得到任何输出,是吗?
  • QProcess:startDetached() 也适用于我,但它本身在命令行上运行,这是我不想要的。我确实打电话给readAllStandardOutput(),但它没有看到任何数据。
  • 我认为问题的一部分似乎是当我 rsync(甚至在命令行上)时,有时 windows 会弹出安全对话框以允许访问网络(它有时会但并非总是如此)。这可能会保留该过程,但在运行QProcess 时不会显示此对话框。也许有一种方法可以禁用此对话框并启动 rsysncwith 参数不显示消息/提示等?
【解决方案2】:

我的研究表明,rsync 的行为可能类似于 scp,因此 answer 在重定向时不会生成输出。

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多