获取命令行/标准输出的返回值

获取命令行/标准输出的返回值

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ㄒ)/~~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值