【问题标题】:How to start a Shell Script with QProcess?如何使用 QProcess 启动 Shell 脚本?
【发布时间】:2012-01-31 20:53:34
【问题描述】:

如何使用 QProcess 启动 Shell 脚本? Shell 脚本中有八个不同的命令,其中一些带有参数,而另一些则没有。

我尝试使用(使用 Ubuntu 11.10)启动 Shell 脚本:

QProcess *Prozess = new QProcess();
Prozess->setWorkingDirectory(MainDirectory);
Prozess->start("/bin/sh", QStringList() << "Shell.sh");

但这不起作用,这意味着没有任何反应。如何让它发挥作用?

【问题讨论】:

  • 代码没问题。它必须在后台运行程序而不显示终端窗口。

标签: c++ qt bash shell qprocess


【解决方案1】:

代码很好。问题出在运行时。

您的程序由于某种原因无法运行/bin/sh(测试您是否可以运行gedit?),或者MainDirectory 变量的目录路径错误(调试它),或者Shell.sh 确实该目录中不存在(大写错误?“./Shell.sh”呢?),或者您没有足够的权限来运行或修改目标目录/文件(它们是否归您所有?)。

【讨论】:

  • 嗨,好主意:)。 gedit 效果很好!问题是我需要“/bin/sh”才能工作。 “./Shell.sh”没有改变任何东西。我还不能投票,因为我没有 15 名声望。任何想法如何使“/bin/sh”工作?
【解决方案2】:

您启动的进程正在后台运行。如果您想查看正在运行的脚本的任何显式输出,您必须连接到void readyReadStandardOutput() 或/和void readyReadStandardError() 并从进程中显式读取。例如:

void onReadyRead() {

   QByteArray processOutput = Prozess->readAllStandardOutput();
}

【讨论】:

  • 系统监控没有显示任何后台运行的进程,并且没有创建脚本应该创建的文件。所以“Prozess->readAllStandardOutput();”也没有帮助。 Shell 脚本应该通过使用“sh”执行来创建文件。
【解决方案3】:

这应该可行:

QProcess::ProcessError Error = myProcess->readAllStandardError();
return Error;

【讨论】:

    【解决方案4】:
    QProcess ().execute ("/bin/sh " + MainDirectory + "/Shell.sh");
    

    会做的。

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2017-11-20
      相关资源
      最近更新 更多