【问题标题】:QProcess call write function failureQProcess调用写函数失败
【发布时间】:2013-02-24 09:39:52
【问题描述】:

我需要调用 QProcess 来启动 xterm,之后我应该发送一些数据 给它。 为什么那些代码不能正常运行?

QProcess proc;
proc.start("xterm");
proc.waitForStarted();
proc.write("ls\n");
proc.waitForFinished();
proc.waitForBytesWritten();
qDebug()<<proc.readAllStandardOutput();//output: nothing
qDebug()<<proc.errorString();//output: "write error"

感谢您的帮助

【问题讨论】:

  • 您调用的大多数函数都有返回值。检查这些返回值并找出问题所在怎么样?
  • 我已经试过了,除了最后一句话,其他都很好
  • “无法正常运行”是什么意思?会挂吗?或者不在调试流中打印任何内容?我看不出 xterm 应该结束其工作的原因,所以您的代码可能挂在proc.waitForFinished();

标签: qt qprocess


【解决方案1】:

您在这里尝试做什么还不是很清楚。您的代码没有意义:您无法将 xterm 'some data'(看起来您希望它为您执行某些命令,此处为 ls)发送到其标准输入。

如果你想要 ls 的输出,只需这样做:

QProcess proc;
proc.start("ls");
proc.waitForFinished();
qDebug() << proc.readAllStandardOutput();

如果你想让一个解释器在后台运行,你可以发送命令让它执行(就像一个 shell)你可以做这样的事情:

QProcess proc;
proc.start("/bin/sh");
proc.waitForStarted();
Q_FOREACH( QString cmd, QStringList() << "ls" << "date" << "echo test" )
{
    proc.write((cmd + "\n").toLocal8Bit());
    proc.waitForReadyRead();
    qDebug() << proc.readAllStandardOutput().split('\n');
}
proc.write("exit\n");
proc.waitForFinished();

【讨论】:

  • 感谢您的帮助,先生。我知道如何直接调用命令,我真正需要的是在控制台中调用 qemu,在 qemu 初始化之后,我应该输入一些信息(使用 QProcess?),比如用户和密码。这里真正的问题是为什么我不能向 xterm 发送数据?对不起我的英语,英语不是我的母语
  • 我对 qemu 一无所知,但也许你应该看看 this doc 的 Getting data in/out of the emulator 部分。显然你可以做一些事情,比如将模拟的串行端口连接到 quemu 的标准输入/标准输出,然后像上面的外壳一样与它通信。不过,我在那张照片中的任何地方都没有看到 xterm。很可能,您尝试做的事情是不可能的。我建议将您的问题的标题更改为更具描述性的名称,例如“如何从外部进程远程控制 qemu?”。
  • 再次感谢,您已经帮了我很多忙。无论如何,我仍然无法向 xterm 发送数据,我会研究你的文档。我试过 proc.start("sh -c \"echo password | sudo -S command\" ") 。它可以为我工作,但不是最好的解决方案。我会保留它。
  • 欢迎您。我还是不明白你想做什么。 xterm 和 sudo 和 qemu 有什么关系?我认为您应该尝试在这里描述您真正尝试做的事情(并将问题标题更改为更具描述性)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多