2012-01-31 243 views
4

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

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

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

但是,这并不工作,这意味着没有任何反应。如何使它工作?

+2

的代码是罚款。它必须在后台运行程序,而不显示终端窗口。 – Hossein 2012-01-31 21:38:59

回答

4

代码没问题。问题是在运行时。

无论你的程序不能出于某种原因(测试是否可以运行gedit呢?),或者MainDirectory变量运行/bin/sh有错误的目录路径(调试的话),或者Shell.sh不会在该目录中(资本错误?“./Shell.sh”?),或者你没有足够的特权来运行或修改目标目录/文件(它们是否属于你?)。

+0

嗨,好主意:)。 gedit的作品非常棒!问题是我需要“/ bin/sh”才能工作。 “./Shell.sh”没有改变任何东西。因为我没有15的声望,所以我不能投票。任何想法如何使“/ bin/sh”工作? – Streight 2012-02-01 13:43:38

1

您开始的过程在后台运行。如果要查看正在运行的脚本的任何明确输出,则必须连接到void readyReadStandardOutput()或/和void readyReadStandardError(),并明确从进程读取。例如:

void onReadyRead() { 

    QByteArray processOutput = Prozess->readAllStandardOutput(); 
} 
+0

系统监视不显示在后台运行的任何进程,并且不创建脚本应创建的文件。所以“Prozess-> readAllStandardOutput();”也没有帮助。 Shell脚本应该通过用“sh”执行来创建文件。 – Streight 2012-01-31 23:18:36

0

这应该工作:

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