QProcess是一个为进程间通信创建的类。在linux相关系统中,可以很方便地用它调用执行命令。
它继承自QIODevice.可以想像,它对其它进程的操作方式,就像读写一个文件一样方便。
下面浏览它的公共函数:
1,enum QProcess::ProcessChannel
Constant | Value | Description |
QProcess::StandardOutput默认 | 0 | standard output (stdout) 标准输出 |
QProcess::StandardError | 1 | standard error (stderr) 标准错误输出 |
对于一些继承来的操作函数,如:read(), readAll(), readLine(), 和 getChar(),它们读取时,只能从两个通道中的一个读取得到被操纵程序的标准输出。
可以通过连接信号得到progress的状态:
Signals
void | error(QProcess::ProcessError error) |
void | finished(int exitCode, QProcess::ExitStatus exitStatus) |
void | |
void | |
void | started() |
void | stateChanged(QProcess::ProcessState newState) |
它的一些静态函数:
Static Public Members
int | execute(const QString & program, const QStringList & arguments)//阻塞式,直到progress退出 |
int | execute(const QString & program) |
QString | |
bool | startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid |
bool | startDetached(const QString & program, const QStringList & arguments) |
bool | startDetached(const QString & program) |
QStringList | systemEnvironment()//一个有用的获取系统环境变量的函数。使用如:QStringList environment = QProcess::systemEnvironment(); // environment = {"PATH=/usr/bin:/usr/local/bin", // "USER=greg", "HOME=/home/greg"} |
————————————————————————————————————————————————————————
下面用mentohust程序举一个它的典型用法:
mentohust是一个校园网认证的工具,在linux中只有后台,没有UI。使用时可在shell中输入mentohust -h。可以得到帮助信息。上面代码的结果是一样的。
这样启动后,可以用write函数向其写入内容,通过readyReadStandardOutput()等信号连到槽函数,然后用readAllStandardOutput()等读函数读取输出进行处理。
给出一个它的参数的详细链接:https://code.google.com/p/mentohust/wiki/Parameter。可用它试试。或网上有操控MPlayer的,百度下。
————————————————————————————————————————————————————————
接下来看它的更高级用法,以更深理解它:
简单控制台程序
方向 | 途径 | |
获取 | 命令行参数 | int main(int argc, char **argv) |
标准输入 | scanf()/getc()/getchar()/... | |
环境变量 | getenv() | |
输出 | 标准输出 | printf() ... |
标准出错 | fprintf(stderr,...) | |
返回值 | return(x)/exit(X)/_Exit(X) |
命令行参数
- QProcess::setNativeArguments()
标准输出
QProcess::readAllStandardOutput () | 获取标准输出 |
QProcess::setStandardOutputFile() | 设置输出到的文件,相当于前面的重定向 |
- QProcess::setStandardOutputProcess()
ls -l | more 这样的管道操作
- read()
- readLine()
- ...
禁止缓冲
注意:如果写的控制台程序准备用于这种途径,且需要实时被读取标准输出,那么一般该程序内需要禁用缓冲
标准出错
- QProcess::readAllStandardError()
- QProcess::setStandardErrorFile()
- QProcess::setReadChannel()
标准输入
- QProcess::setStandardInputFile()
返回值
- int QProcess::execute()
- int QProcess::exitCode()
环境变量