qt获取命linux命令行输出,Qt 获取cmd运行结果

http://www.cnblogs.com/gisbeginner/archive/2012/12/08/2809063.html

BOOL ExecDosCmd()

{

#define EXECDOSCMD "ping http://www.baidu.com" //可以换成你的命令

SECURITY_ATTRIBUTES sa;

HANDLE hRead,hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);

sa.lpSecurityDescriptor = NULL;

sa.bInheritHandle = TRUE;

if (!CreatePipe(&hRead,&hWrite,&sa,0))

{

return FALSE;

}

char command[1024]; //长达1K的命令行,够用了吧

strcpy(command,"Cmd.exe /C ");

strcat(command,EXECDOSCMD);

STARTUPINFO si;

PROCESS_INFORMATION pi;

si.cb = sizeof(STARTUPINFO);

GetStartupInfo(&si);

si.hStdError = hWrite; //把创建进程的标准错误输出重定向到管道输入

si.hStdOutput = hWrite; //把创建进程的标准输出重定向到管道输入

si.wShowWindow = SW_HIDE;

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

//关键步骤,CreateProcess函数参数意义请查阅MSDN

QString str(command);

if (!CreateProcess(NULL, (LPWSTR)str.utf16(),NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

{

CloseHandle(hWrite);

CloseHandle(hRead);

return FALSE;

}

CloseHandle(hWrite);

char buffer[4096] = {0}; //用4K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。

DWORD bytesRead;

while (true)

{

if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)

break;

//buffer中就是执行的结果,可以保存到文本,也可以直接输出

QString strTemp(buffer);

QMessageBox testMassage1;

testMassage1.setText(strTemp);

testMassage1.exec();

//这里是弹出对话框显示

}

CloseHandle(hRead);

return TRUE;

}

另一个方法:

QProcess p(0);

p.start("cmd", QStringList()<

p.waitForStarted();

p.waitForFinished();

QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput());

QMessageBox testMassage1;

testMassage1.setText(strTemp);

testMassage1.exec();

return true;

通过匿名管道获取CMD运行结果

#include #include #include using namespace std; /* ...

使用 Qt 获取 UDP 数据并显示成图片(2)

本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...

使用 Qt 获取 UDP 数据并显示成图片

一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...

qt获取网络ip地址的类

最近在学习qt网络编程,基于tcp和udp协议. 看了一些别人的程序和qt4自带的例子,困扰我最大的问题就是获取ip的类,总结起来还挺多的. 主要介绍常用的QtNetwork Module中的QHos ...

python学习笔记(CMD运行文件并传入参数)

好久没更新博客了 最近换了份新工作 有时间来整理一篇 在命令行CMD中执行文件过程中如何传入并识别参数 # -*- coding: utf-8 -*- # CMD运行类 # 作者: # 时间: 201 ...

Atitit linux获取项目运行环境版本

Atitit linux获取项目运行环境版本 1.1. Nginx版本1 1.2. Php版本1 1.3. Mysql版本2 1.4. Redis版本2 1.1. Nginx版本 [root@iZ25 ...

golang获取程序运行路径

golang获取程序运行路径: /* 获取程序运行路径 */ func getCurrentDirectory() string { dir, err := filepath.Abs(filepath ...

cmd运行sql server安装

cmd运行sql server安装 SQL2012非群集安装_更新到最新版本.bat setup.exe /UpdateSource=.\hotfix\Latest /ACTION="Ins ...

随机推荐

Python之import

今天写了一个很简单的111.py文件(模块),用命令行直接import 111报错:syntaxerror:invalid systax 从网上查了一下,原因有如下集中: 1,所导入模块没有sys.p ...

仿Office的程序载入窗体

初次接触启动界面记不清是在哪一年了,估计是小学四年级第一次打开Office Word的时候吧,更记不清楚当时的启动界面是长啥样了.后来随着使用的软件越来越多,也见到各式各样的启动界面.下面就列举了两个 ...

用一条sql语句显示数据百分比并加百分号

来源于:http://neil-han.iteye.com/blog/1948124 求数值所占比重 关键点:(round(t1.cnt/t2.totalCount*100,2))||'%'

轻松搞定面试中的二叉树题目&lpar;java&amp&semi;python&rpar;

树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.二叉 ...

uva 725 Division(暴力模拟)

Division 紫书入门级别的暴力,可我还是写了好长时间 = = [题目链接]uva 725 [题目类型]化简暴力 &题解: 首先要看懂题意,他的意思也就是0~9都只出现一遍,在这2个5位数 ...

android 控件描边取消重叠

今天写组件的时候用到了描边.可是两个组件放在一起时,描边会变重叠,使之变粗.就不是很美观了. 如何取消呢?网上查了好久没找到,然后就自己试了试,找到了解决方法,就在此记录一下,防止以后忘记. 很简单分 ...

Dynamic Flash Messages

Dynamic Flash Messages的类似软件 - 其他jQuery插件 - 开源中国社区 Dynamic Flash Messages

linux 控制台使用技巧

1. 键盘无响应 可能是按下ctrl+s, 此时按下scroll即可解锁 2. 想看上一屏的信息 shift+pageup 3. 打印的信息和错误信息区分 普通信息, 用printf, cout打印的 ...

IOS学习之路七(通过xib自定义UITableViewCell)

一.新建iOS Application工程,选择Single View Application,不要选中Use Storyboard.假设指定的是product name是:UITableViewCe ...

&lbrack;妙味DOM&rsqb;第三课:Event-事件详解1

知识点总结 焦点事件 onfocus 获取焦点 onblur 失点焦点 obj.focus() 给指定元素设置焦点 obj.blur() 取消指定元素的焦点 obj.select() 选择指定元素里的 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt中执行Linux命令行可以使用QProcess类。QProcess类提供了一个接口,可以启动一个外部进程并与其交互。以下是一个简单的示例: ```cpp #include <QProcess> int main(int argc, char *argv[]) { QProcess process; process.start("ls", QStringList() << "-l" << "/"); if (!process.waitForStarted()) return 1; if (!process.waitForFinished()) return 1; QByteArray output = process.readAllStandardOutput(); qDebug() << output; return ; } ``` 在上面的示例中,我们使用QProcess启动了一个名为“ls”的进程,并传递了两个参数“-l”和“/”。我们使用waitForStarted()和waitForFinished()函数等待进程启动和完成。最后,我们使用readAllStandardOutput()函数读取进程的输出,并将其打印到控制台上。 当然,这只是一个简单的示例。在实际应用中,您可能需要更复杂的命令行参数和更复杂的输出处理。但是,使用QProcess类可以轻松地在Qt中执行Linux命令行。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,能够支持多种操作系统和硬件平台。在Qt中,通过执行Linux命令行可以实现很多功能,比如访问系统信息、配置网络、执行文件操作等。 Qt提供了QProcess类来执行Linux命令行,该类可以启动一个外部进程并与其进行交互。在使用QProcess执行Linux命令行之前,需要首先创建一个QProcess对象,然后设置进程的参数和选项。下面是一个示例代码: ```cpp QProcess process; QStringList arguments; arguments << "-l" << "-a"; process.start("ls", arguments); process.waitForFinished(); QByteArray output = process.readAllStandardOutput(); ``` 上面的代码创建了一个QProcess对象,并使用start()方法启动了一个名为“ls”的进程,并向其传递了两个参数“-l”和“-a”。waitForFinished()方法等待进程执行完成,而readAllStandardOutput()方法则读取了进程的标准输出并返回了一个QByteArray对象。 除了QProcess,Qt还提供了其他执行Linux令的工具类和函数,如QFile、QDir、QFileInfo等。这些工具类和函数能够方便地访问文件系统和系统信息,从而实现各种功能。 需要注意的是,Qt中执行Linux命令行可能会涉及到权限和安全问题,因此应该谨慎使用,并严格按照官方文档和推荐实践进行操作。 ### 回答3: Qt是一个跨平台的C++应用程序框架,可以用于开发GUI应用程序。虽然Qt本身不提供执行Linux命令行的API接口,但可以使用Qt的QProcess类来执行Linux命令行。 QProcess类是Qt的一个重要的进程类,代表了一个运行在系统中的进程。它提供了一个简单的方法来在Qt应用程序中执行外部程序或命令行,并且能够在程序运行中与外部进程进行交互。 要使用QProcess类执行Linux命令行,首先需要包含Qt的QProcess头文件。然后可以使用QProcess类的start()函数来启动进程并执行命令行。start()函数具有许多重载,可以按需设置进程名称、命令行参数、工作目录等相关参数。 例如,以下代码片段演示了如何使用QProcess类执行Linux中的ls令: ```c++ #include <QCoreApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QProcess process; process.start("ls"); if (!process.waitForStarted()) { qDebug() << "Failed to start process!"; return -1; } if (!process.waitForFinished()) { qDebug() << "Failed to finish process!"; return -1; } QString output = process.readAllStandardOutput(); qDebug() << output; return a.exec(); } ``` 以上示例中,QProcess对象process使用start()函数执行ls命令行。接着,通过waitForStarted()和waitForFinished()函数等待进程启动和完成。最后,通过readAllStandardOutput()函数获取命令行输出并打印到控制台中。 需要注意的是,在使用QProcess类执行Linux命令行时,应该确保命令行参数是安全的,以免命令行注入等安全问题。另外,应该确保命令行输出格式是可预期的,并避免不良的输出导致应用程序异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值