首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从C#中的进程连续读取输出(StdOut),多次访问

从C#中的进程连续读取输出(StdOut),多次访问。

在C#中,可以使用Process类来执行外部进程,并通过StandardOutput属性来获取进程的标准输出。要实现连续读取输出,可以使用BeginOutputReadLine方法和OutputDataReceived事件。

下面是一个示例代码,演示如何从C#中的进程连续读取输出:

代码语言:txt
复制
using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        Process process = new Process();
        process.StartInfo.FileName = "your_executable_file.exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;

        process.OutputDataReceived += Process_OutputDataReceived;

        process.Start();
        process.BeginOutputReadLine();

        // 多次访问进程输出
        for (int i = 0; i < 5; i++)
        {
            // 这里可以根据需要进行其他操作

            // 等待一段时间,以便进程有输出
            System.Threading.Thread.Sleep(1000);
        }

        process.CancelOutputRead();
        process.WaitForExit();
    }

    static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        if (!string.IsNullOrEmpty(e.Data))
        {
            Console.WriteLine(e.Data);
        }
    }
}

上述代码中,首先创建一个Process对象,并设置FileName属性为要执行的可执行文件的路径。然后,将UseShellExecute属性设置为false,以便重定向标准输出。接下来,订阅OutputDataReceived事件,并在事件处理程序中处理输出数据。然后,调用Start方法启动进程,并调用BeginOutputReadLine方法开始异步读取输出。在需要多次访问输出的地方,可以进行其他操作,然后等待一段时间,以便进程有输出。最后,调用CancelOutputRead方法取消输出读取,并调用WaitForExit方法等待进程退出。

这种方法适用于需要连续读取进程输出的场景,例如实时日志监控、命令行交互等。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 移动开发(移动推送、移动分析):https://cloud.tencent.com/product/mps
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(Tencent Real-Time 3D):https://cloud.tencent.com/product/trtc
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在父进程读取子(外部)进程标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...这个问题,微软以为为我们考虑过了,我们可以从一个API可以找到一些端倪——CreateProcess。...它是我们启动子进程时,控制子进程启动方式参数。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。...设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程标准错误输出重定向到管道输入 si.hStdOutput = hWrite

3.8K10

c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作解释_

例如,标准输入流使得程序可以键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据。...标准输入、标准输出和标准错误是用文件指针stdin、stdout和stderr来处理。 ? 2....通过这个程序可以看出,应该是每打开一次文件,哪怕多次打开都是同一个文件,进程级打开文件表应该都会添加一个记录。如果是打开是同一个文件,这多条记录对应着同一个物理磁盘文件。...由于每一次打开文件所进行操作都是通过进程级打开文件表不同记录来实现,这样,相当于每次打开文件操作是相对独立,这就是上面的程序运行结果,两次读取文件结果是一样(而不是第二次读取第一次结束位置进行...要从文件顺序检索数据,程序通常文件开始来读取,而且连续读取所有数据,直至找到期望数据。在程序执行过程,有可能会多次处理文件数据(重新文件开头处理数据)。

98710

Linux:基础IO(一.C语言文件接口与系统调用、默认打开文件流、详解文件描述符与dup2系统调用)

在操作系统进程在打开文件时会获得一个文件描述符,这个文件描述符是进程访问该文件标识符。一个进程可以打开多个文件,每个打开文件都会有一个对应文件描述符。...这意味着一个进程可以同时访问多个文件,进行读取、写入等操作。 当一个文件被打开时,通常会将文件部分或全部内容加载到内存,以便进程可以直接访问和操作文件内容。...这样可以提高文件访问速度和效率。 在系统,一个进程能打开多个文件。...*stream); 功能:指定文件读取一行数据。...read() 函数会尝试文件描述符 fd 对应文件读取 count 个字节数据,并将读取数据存储到 buf 指向内存缓冲区。函数返回值是实际读取字节数。

15010

【Linux】基础IO——系统文件IO&fd&重定向&理解

---- 四、文件描述符fd 1.引入 看到上面的结果,open返回值为什么是3开始,那0,1,2跑哪里去了呢,而且还是连续小整数(说到连续,我们想到是数组下标连续) 在C语言阶段,我们知道C...因为0,1,2默认被占用,我们C语言封装了接口,同时也封装了操作系统内文件描述符。 此外,数字为什么0,1,2连续整数,文件描述符本质是什么?...这也就是为什么文件操作系统读到数是整数,而且是连续,因为文件操作系统内标记进程和文件之间关系就是文件描述符表,用数组标定文件内容!通过文件描述符来访问文件!...进程找到自己文件描述符表传入对应下标值访问对应文件。...我们向标准输出显示器进行打印时候,默认是向stdout打印,而stdout文件描述符封装了1,当我们进行文件操作时候,都是在向stdout打印,而stdoutfd都是1,当1号文件描述符没变,里面的指向发生了变化

37020

Linux之基础IO

答:没有,文件访问是运行时进行访问。因此,对文件操作本质是,进程对文件操作。 一个文件如果没有被打开,它可以直接被访问吗? 答:不能!!!...一个文件要被访问,必须先被打开fopen —— 文件访问 是 用户进程 + OS。 ——> 文件操作本质是 : 进程和被打开文件关系。...系统调用write是用来往文件写内容,其中 那么是谁提供文件读取分类(文本类和二进制类)? 是语言本身。 库函数接口是对系统调用进行了封装结果。...访问文件时,是用底层open系统调用接口,它访问文件需要用到文件描述符,在C语言中,我们访问文件用是FILE而不是文件描述符,因此可以推测出,FILE必定有一个文件描述符字段。...它本质是什么? 文件描述符本质是数组下标。 文件是存储在磁盘上,要操作某个文件就要打开该文件,即,将该文件相关属性信息磁盘加载到内存

17030

Python 异步: 在非阻塞子进程运行命令(19)

我们可以 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取进程运行。 1....这很有用,因为它允许命令在子进程执行,并允许 asyncio 协程读取、写入和等待它。...('ls', stdout=asyncio.subprocess.PIPE) 然后我们可以通过 asyncio.subprocess.Process 实例通过 communicate() 方法读取程序输出...echo 命令将直接在标准输出上报告提供字符串。下面列出了完整示例。 请注意,此示例假设您可以访问“echo”命令,我不确定它是否适用于 Windows。...('ls', stdout=asyncio.subprocess.PIPE) 然后我们可以通过 asyncio.subprocess.Process 实例通过 communicate() 方法读取程序输出

2.8K40

【Linux】理解系统中一个被打开文件

一个进程可以通过操作系统打开一个文件,也可以打开多个文件,所以操作系统一定会给进程提供系统调用接口去打开文件;这些文件被加载到内存,可能会存在多个,同时,加载磁盘上文件,一定会涉及到访问磁盘设备,这些操作由操作系统来完成...当进程需要读取文件数据时候,必然是先要将数据加载到内存空间中,即 struct file 文件缓冲区;如果我们需要向这个文件写入呢?...其实在进程运行时候,默认把标准输入(键盘:stdin)、标准输出(显示器:stdout)、标准错误(显示器:stderr) 打开了,它们分别代表 0、1、2;那么它们也是文件吗?...buffer); close(fd); return 0; } 如上我们使用了 fread 接口,我们可以看一下手册: 结果如下: 如上图,本应该标准输入键盘读取数据...,但是由于我们关闭了 0号 fd,再打开 log.txt,所以最后 log.txt 读取了数据。

9410

CCPP输入输出函数汇总分析

头文件定义了标准输入和输出,分别是stdin,stdout. arg_list可以是变量名,也可以是表达式,但最终都会以值形式填充进format. getc() int getc(FILE *fp...) getc主要是文件读出一个字符.常用判断文件是否读取结束语句为:(ch = getc(fp)) !...()了. getchar() int getchar(void) getchar主要是标准输入流读取一个字符.默认标准输入流即stdio.h定义stdin.但是输入流读取字符时又 涉及到缓冲问题...*str) gets主要是标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去. puts() int puts(char *str) puts主要是把字符串str写到标准流stdout中去...标准输出流(由fp=stdout所指)。

1.2K20

WindowsAPI 之 CreatePipe、CreateProcess

管 道(Pipe)实际是用于进程间通信一段共享内存,创建管道进程称为 管道服务器,连接到一个管道进程为 管道客户机。一个进程在向管道写入数据后,另 一进程就可以管道另一端将其读取出来。...大多数命令行程序stdin输入,输出stdout或 stderr,有时我们需要重定向stdout,stderr,stdin。...比如:将输出写入文件,又或者我们要将命令行程序输出结果显示到 Windows对话框。 在Windows编程,重定向需要用到管道(Pipe)概念。管道是一种用于在进程间共享数据机制。...比如一个控制台程序打印一行文字: 图片 会在windows弹出对话框输出: 图片 为什么会输出到这里而不是别的地方呢?因为这里就是所说StdOut(标准输出地方。...同时在创建子进程时候,必须将子进程标准输入句柄设置为父进程创建匿名管道时得到读管道句柄,将子进程标准输出句柄设置为父进程创建匿名管道时得到写管道句柄。然后在子进程就可以读写匿名管道了。

3.7K10

使用 C# 开发 node.js 插件

纯 C 编程效率低,木有 trycatch 语言调试难度也大 (磕磕绊绊) 编写好 .node 扩展文件,放在 electron 主进程运行会有一定隐患稍有差错会导致软件闪退 (后来用子进程隔离运行...来说再合适不过了;但是问题是 C# 咋编译到 Node.js ?...之前如果你用过 spawn 启动过 Node.js 程序(.js文件),那么你肯定知道通讯使用 send 方法即可;这个是 Node.js 内置方式 我们启动进程C# 程序,通讯问题只能我们自己来解决了...(这个我也不能很明确理解);能够接收到标准 stdio 输入/输出 那我们就利用这点使用 ChildProcessWithoutNullStreams.stdout.on('data', chunk...大致流程 image.png 如果觉得这篇文章有难度,可以看简单版哦 Node.js 利用 stdio 标准输入/输出实现与 C# 程序通讯 开发环境 C# 代码部分使用 Visual Studio

2K30

【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

2.在磁盘文件如果想要被进程访问,则一定绕不开操作系统,因为磁盘是硬件,而操作系统是硬件管理者,所以想要访问文件,必须通过操作系统提供接口来访问文件,因为直接访问方式是不安全,所以必须使用操作系统提供系统调用接口来访问这些文件...当关闭文件描述符1时,本来应该写到stdout对应显示器文件内容,现在写到了log.txt文件,这样特性就叫做输出重定向。...所以大多数情况下,我们输出数据都是到标准输出文件stdout,例如printf、fprintf、fputs、等函数,都会将内容输出stdout(标准输出文件),最后显示到stdout对应显示器上...原来输出到屏幕改为输出到文件,这就叫做输出重定向。 而追加重定向方式也比较简单,只要将文件打开方式O_TRUNC替换为O_APPEND即可。...原来键盘读取数据,改为文件fd读取数据,这就叫做输入重定向。

1.1K30

CCPP输入输出函数汇总分析

头文件定义了标准输入和输出,分别是stdin,stdout. arg_list可以是变量名,也可以是表达式,但最终都会以值形式填充进format. getc() int getc(FILE *fp...()了. getchar() int getchar(void) getchar主要是标准输入流读取一个字符.默认标准输入流即stdio.h定义stdin.但是输入流读取字符时又 涉及到缓冲问题...补充:必须指定用户进程缓冲区长度n,即buf大小,此函数流中一直读到下一个换行符为止,但是不超过n-1个字符,读入字符被送入用户缓冲区buf。该缓冲区以null字符结尾。...至于流什么时候将C写入标准输出文件,这个由库函数来实现,不用用户操心; 补充:putchar(c)=putc(c,stdout); 每次输出一行: putchar() 函数是 C/C++ 标准库函数...标准输出流(由fp=stdout所指)。

1.7K20

Unity性能调优手册9UnityScript:空生命周期函数,tags,组件,string,显式销毁类(Texture2D、Sprite、Material),burst

UnityCsReference引用了他们各自实现。您可以看到,这两个调用进程都是用本机代码实现。 Unity用c#实现脚本,但Unity本身是用c++实现。...由于c#内存空间和c++内存空间不能共享,所以分配内存是为了将字符串信息c++端传递到c#端。...这是在每次调用它时完成,所以如果您想多次访问它,您应该缓存它 有关Unity如何在c#和c++之间工作和内存更多信息,请参阅“Unity Runtime”。...由于在多次访问站点时每次都执行转换是浪费,因此缓存标识值并重复使用它。如下面的示例所示,为了便于使用,建议定义一个列出缓存标识值类。...(计算没有顺序依赖),并且由于输出数组内存对齐是连续,因此可以使用SIMD指令一起计算它们。

20910

【干货】容器Web Console技术实现

写入,命令执行后,再从docker exec进程stdout读取输出,通过websocket协议返回浏览器显示给用户,达到交互目的。...随后,通过hterm收到键盘输入消息,将通过websocket连接发送给GoTTY,同时,websocket读取消息,将写入到hterm,最终显示给用户。...GoTTY在收到用户请求后,会执行启动时设置参数,得到进程stdin和stdout。...随后会在单独goroutine,循环读取进程输出写到websocket,循环websocket读取写到进程输入。如下: ? ?...这里最简单方法就是从命令进程stdout读取到内容,通过websocket返回同时,也输出到一个日志文件,如下: ? 日志文件可以根据自身业务规则定义文件名,方便检索。

3.1K10

Linux笔记(5)| 文件IO操作(续)

1、多次打开同一文件 重复打开同一文件读取 (1)一个进程两次打开同一个文件,然后分别读取,看结果会怎么样 (2)结果无非2种情况:一种是fd1和fd2分别读,第二种是接续读。...2、文件共享3种实现方式 第一种是同一个进程多次使用open打开同一个文件,第二种是在不同进程中去分别使用open打开同一个文件(这时候因为两个fd在不同进程,所以两个fd数字可以相同也可以不同...3、再论文件描述符 (1)文件描述符本质是一个数字,这个数字本质上是进程表中文件描述符表一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应文件表。...这三个文件分别叫stdin、stdout、stderr。也就是标准输入、标准输出、标准错误。...标准输入一般对应是键盘(可以理解为:0这个fd对应是键盘设备文件),标准输出一般是LCD显示器(可以理解为:1对应LCD设备文件),printf函数其实就是默认输出到标准输出stdout上了。

1K40

【干货】容器Web Console技术实现

写入,命令执行后,再从docker exec进程stdout读取输出,通过websocket协议返回浏览器显示给用户,达到交互目的。...随后,通过hterm收到键盘输入消息,将通过websocket连接发送给GoTTY,同时,websocket读取消息,将写入到hterm,最终显示给用户。...GoTTY在收到用户请求后,会执行启动时设置参数,得到进程stdin和stdout。...随后会在单独goroutine,循环读取进程输出写到websocket,循环websocket读取写到进程输入。如下: ? ?...这里最简单方法就是从命令进程stdout读取到内容,通过websocket返回同时,也输出到一个日志文件,如下: ? 日志文件可以根据自身业务规则定义文件名,方便检索。

2.8K10

【Linux】 基础IO——文件(下)

,默认会打开当前进程三个文件: 标准输入、标准输出、标准错误 ——本质都是文件 C语言:标准输入(stdin) 标准输出(stdout) 、标准错误(stderr) ——文件在系统层表现 C++:...->stdout\n");//向stdout进行输出 fprintf(stdout,"hello printf->stdout\n ");//将数据向stdout进行输出...,以供CPU通过进程方式来访问对应文件 任何一个进程,在启动时候,默认会打开进程三个文件,系统中一定会存在大量被打开文件,这些文件一定会被操作系统管理起来,通过先描述,在组织,创建 struct...内存把数据写到显示器上,属于写入过程,读取键盘读取,键盘输入后,操作系统把输入数据回显到显示器上了,所以显示器只能负责打印 不同硬件所对应方法是完全不一样,打开键盘时,操作系统内部会创建...修改myfile.txt文件内容 关闭文件描述符0,所以scanf读取时会读取log.txt文件内容 读取内容与log.txt文件内容相同 ---- 本来要从键盘读取,结果现在要在文件读取

2.1K30
领券