如何使用 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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
linux下QT中如何使用QProcess运行linux命令。
如何在 Linux unsing QProcess 下执行 shell 命令?
如何使用 QProcess 同时运行多个 python 脚本
QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务