获取命令行/标准输出的返回值
1. 摘要
开发小功能之获取命令行输出内容
2. 使用C进行获取
#include <stdio.h>
#include <iostream>
//
int main() {
char buffer[1024] = { 0 };
// 创建一个管道并执行命令,这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数
// 第二个参数支持的操作模式:
// 1. "r": 调用进程可使用返回的流读取生成的命令的标准输出
// 2. "w": 调用进程可使用返回的流写入生成的命令的标准输入
// 3. "b": 在二进制模式下打开
// 4. "t": 在文本模式下打开
FILE* pipe = _popen("echo %USERPROFILE%", "r");
if (NULL == pipe) {
return -1;
}
while (!feof(pipe)) {
// 读取一行内容
if (fgets(buffer, sizeof(buffer), pipe) != NULL) {
std::cout << buffer << std::endl;
}
}
_pclose(pipe);
return 0;
}
3. 使用C#获取
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpVersion
{
class Program
{
static void Main(string[] args)
{
using (Process process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = "ping";
process.StartInfo.Arguments = "localhost";
// 设置为false表示直接从可执行文件创建进程 重定向IO流时必须为false
process.StartInfo.UseShellExecute = false;
// 不显示窗口
process.StartInfo.CreateNoWindow = true;
// 将应用程序的文本输出写入 System.Diagnostics.Process.StandardOutput流中
process.StartInfo.RedirectStandardOutput = true;
// 将应用程序的错误输出写入 System.Diagnostics.Process.StandardError流中
process.StartInfo.RedirectStandardError = true;
// 也可以使用OutputDataReceived进行读取,OutputDataReceived是一个DataReceivedEventHandler类型,
// 调用时机每次应用程序向其重定向的System.Diagnostics.Process.StandardOutput中写入行时发生
// string recvData ="";
//process.OutputDataReceived += (sender, e) =>
//{
// recvData += (e.Data + "\n");
//};
process.Start();
Console.WriteLine("标准输出:{0}",process.StandardOutput.ReadToEnd());
Console.WriteLine("错误输出:{0}",process.StandardError.ReadToEnd());
// 等待调用进程结束
process.WaitForExit();
process.Close();
}
Console.ReadKey();
}
}
}
关注「CoderPro」公众号,专注于分享.NET/C++知识及算法的大本营,新手公众号请大家多多关照/(ㄒoㄒ)/~~