如何使用 QProcess 启动 Shell 脚本?

Posted

技术标签:

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

Shell 脚本中有八个不同的命令,其中一些带有参数,而另一些则没有。

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

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

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

【问题讨论】:

代码没问题。它必须在后台运行程序而不显示终端窗口。 【参考方案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");

会做的。

【讨论】:

以上是关于如何使用 QProcess 启动 Shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

QProcess 和 shell:进程仍在运行时被销毁

QProcess 传递(shell)参数

linux下QT中如何使用QProcess运行linux命令。

如何在 Linux unsing QProcess 下执行 shell 命令?

如何使用 QProcess 同时运行多个 python 脚本

QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务