Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
2017-05-25 19:44
549 查看
http://www.cnblogs.com/findumars/p/5249078.html
QProcess可以用来启动外部程序,并与它们交互。
要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。
另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。
简述
接口
示例
cmd
启动cmd
cmd带参数
cmd获取返回值
putty远程登录
WinSCP远程文件传输
管道
错误处理
参数arguments
获取环境变量
start() 启动外部程序
readAllStandardError() 从标准错误中获取所有数据
readAllStandardOutput() 从标准输出中获取所有数据
write() 继承于QIODevice
close() 继承于QIODevice
除此之外,QProcess还包含静态成员函数:
execute() 启动一个进程,然后等待该进程结束。
startDetached() 启动一个进程,然后使其和当前进程脱离进程的父子关系。
1
2
使用cmd来删除本地文件
使用cmd来查看网络状况
一个进程的标准输出流到目标进程的标准输入。
可以用下面代码实现:
启动外部程序,当发生错误时,可以根据指定的错误描述所发生的错误类型。
以putty远程登录为例,putty可以使用命令行
所以中间为空格的地方使用arguments进行单个字符串分离:
1
2
其它参数类似。
1
2
3
返回调用进程的环境变量作为一个键值对列表。
1
2
http://blog.csdn.net/liang19890820/article/details/50478833
简述
QProcess可以用来启动外部程序,并与它们交互。要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。
另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。
简述
接口
示例
cmd
启动cmd
cmd带参数
cmd获取返回值
putty远程登录
WinSCP远程文件传输
管道
错误处理
参数arguments
获取环境变量
接口
start() 启动外部程序readAllStandardError() 从标准错误中获取所有数据
readAllStandardOutput() 从标准输出中获取所有数据
write() 继承于QIODevice
close() 继承于QIODevice
除此之外,QProcess还包含静态成员函数:
execute() 启动一个进程,然后等待该进程结束。
startDetached() 启动一个进程,然后使其和当前进程脱离进程的父子关系。
示例
cmd
启动cmd
QProcess process(this); process.startDetached("cmd.exe");
1
2
cmd带参数
使用cmd来删除本地文件QProcess process(this); process.start("cmd.exe"); process.write ("del E:\\a.txt\n\r"); process.write ("exit\n\r"); process.waitForFinished(); process.close();
cmd获取返回值
使用cmd来查看网络状况QStringList arguments; arguments << "/c" << "ping www.baidu.com"; QProcess process(this); process.start("cmd.exe", arguments); process.waitForStarted(); process.waitForFinished(); QString strResult = QString::fromLocal8Bit(process.readAllStandardOutput()); QMessageBox msgBox(this); msgBox.setText(strResult); msgBox.exec();
putty远程登录
QString program = "E:/Putty.exe"; QStringList arguments; arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73"); QProcess *process = new QProcess(this); process->setProcessChannelMode(QProcess::SeparateChannels); process->setReadChannel(QProcess::StandardOutput); process->start(program, arguments, QIODevice::ReadWrite);
WinSCP远程文件传输
QString program = QCoreApplication::applicationDirPath() + "/WinSCP/WinSCP.exe"; QStringList arguments; arguments << QString("%1:%2@%3:%4").arg("root").arg("wang").arg("172.18.5.73").arg(22); QProcess *process = new QProcess(this); process->setProcessChannelMode(QProcess::SeparateChannels); process->setReadChannel(QProcess::StandardOutput); process->start(program, arguments, QIODevice::ReadWrite);
管道
一个进程的标准输出流到目标进程的标准输入。command1 | command2
可以用下面代码实现:
QProcess process1; QProcess process2; process1.setStandardOutputProcess(&process2); process1.start("command1"); process2.start("command2");
错误处理
启动外部程序,当发生错误时,可以根据指定的错误描述所发生的错误类型。connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError))); void processError(QProcess::ProcessError error) { switch(error) { case QProcess::FailedToStart: QMessageBox::information(0, "Tip", "FailedToStart"); break; case QProcess::Crashed: QMessageBox::information(0, "Tip", "Crashed"); break; case QProcess::Timedout: QMessageBox::information(0, "Tip", "Timedout"); break; case QProcess::WriteError: QMessageBox::information(0, "Tip", "WriteError"); break; case QProcess::ReadError: QMessageBox::information(0, "Tip", "ReadError"); break; case QProcess::UnknownError: QMessageBox::information(0, "Tip", "UnknownError"); break; default: QMessageBox::information(0, "Tip", "UnknownError"); break; } }假设不存在对应的外部程序,则会返回错误类型
QProcess::FailedToStart。[/code]
参数arguments
以putty远程登录为例,putty可以使用命令行putty [-pw password] user@ip来进行连接。
所以中间为空格的地方使用arguments进行单个字符串分离:
QStringList arguments; arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73");
1
2
其它参数类似。
QProcess process; process.start("del /s *.txt"); //等同于process.start("del", QStringList() << "/s" << "*.txt");
1
2
3
获取环境变量
返回调用进程的环境变量作为一个键值对列表。QStringList environment = QProcess::systemEnvironment(); //environment = {"PATH=/usr/bin:/usr/local/bin", "USER=greg", "HOME=/home/greg"}
1
2
http://blog.csdn.net/liang19890820/article/details/50478833
相关文章推荐
- Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
- Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
- QT中调用外部程序:QProcess的使用
- Qt中使用QProcess启动外部程序和关闭外部程序
- QT中调用外部程序:QProcess的使用
- QT中调用外部程序:QProcess的使用
- QT中调用外部程序:QProcess的使用
- QT中调用外部程序:QProcess的使用
- 使用Qt打开外部文件,调用外部程序(QDesktopServices,QUrl ,QProcess,QProcess)
- QT中调用外部程序:QProcess的使用
- 浅析C# 使用Process调用外部程序中所遇到的参数问题
- C#做服务使用Process启动外部程序没窗体
- QT中调用外部程序:QProcess的使用
- 在程序中通过Process启动外部exe的方法及注意事项
- 使用Process启动程序,你会吗?
- QT使用GIF作程序启动画面
- qt 5.0中HeaderView的setResiziMode无法使用的问题
- 使用QT调用外部程序-小心linux中的命令陷阱
- QT 使用QProcess 调用外部程序并截取输出流
- C#使用Process.Start启动程序出错“Unknown error (0xffffffff)”的解决方法