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

如何在没有延迟的情况下从Win32中的另一个进程捕获stdout?

在没有延迟的情况下从Win32中的另一个进程捕获stdout,可以使用以下方法:

  1. 管道(Pipes):

管道是一种进程间通信(IPC)机制,可以在不同进程之间传输数据。在Win32中,可以使用匿名管道(Anonymous Pipes)或命名管道(Named Pipes)来实现。

创建匿名管道:

代码语言:c
复制
HANDLE hReadPipe, hWritePipe;
CreatePipe(&hReadPipe, &hWritePipe, NULL, 0);

创建命名管道:

代码语言:c
复制
HANDLE hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\PipeName"),
                               PIPE_ACCESS_DUPLEX,
                               PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
                               PIPE_UNLIMITED_INSTANCES,
                               BUFFER_SIZE,
                               BUFFER_SIZE,
                               0,
                               NULL);
  1. 重定向输出:

在创建子进程时,可以使用STARTUPINFO结构体中的hStdOutputhStdError字段,将子进程的stdout和stderr重定向到管道。

代码语言:c
复制
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;

CreateProcess(NULL,
              lpCommandLine,
              NULL,
              NULL,
              TRUE,
              0,
              NULL,
              NULL,
              &si,
              &pi);
  1. 读取输出:

在父进程中,可以使用ReadFile函数从管道中读取子进程的stdout和stderr。

代码语言:c
复制
DWORD dwRead;
CHAR chBuf[BUFFER_SIZE];

ReadFile(hReadPipe, chBuf, BUFFER_SIZE - 1, &dwRead, NULL);
  1. 关闭句柄:

在读取完成后,记得关闭管道句柄。

代码语言:c
复制
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);

这样,就可以在没有延迟的情况下从Win32中的另一个进程捕获stdout了。

推荐的腾讯云相关产品:

  • 腾讯云Serverless:提供无服务器计算服务,可以快速构建、运行和管理应用程序,无需担心服务器和运维工作。
  • 腾讯云容器服务:支持容器化应用程序的部署和管理,可以帮助用户快速构建微服务架构。
  • 腾讯云API网关:提供API的创建、发布、管理和监控能力,可以帮助用户快速构建API服务。

产品介绍链接地址:

相关搜索:如何在终止前从派生的子进程中获取实时stdout数据?如何在没有#的情况下模拟Verilog中的延迟?可以被合成的如何在没有组件的情况下从Angular 9+中的延迟加载模块中动态注入服务?如何在没有ptrace的情况下将代码注入到进程中如何在没有点击的情况下从Chrome自定义选项卡中捕获URL?如何在没有TextView的情况下从accessibilityService中读取内容?如何在F#中没有警告的情况下捕获任何异常(System.Exception)?如何在没有phpMyAdmin的情况下从文件中获取MySql数据如何在Python Selenium中没有Javascript的情况下从DIV中获取ID?如何在C#中以没有密码的另一个用户的身份创建进程?如何在没有函数调用的情况下从宏中填充指针数组?如何在没有StreamBuilder的情况下从Firestore中检索实时数据如何在没有原始方法类型的情况下从字典中调用MethodInfo?如何在没有ORM的情况下在Nestjs中从不同的数据库(如Oracle/Postgress等)执行存储的Proc / Function如何在没有Linq的情况下从列表中获取一些对象?如何在没有唯一值的情况下从查询中删除完全重复的行?如何在django中没有模型的情况下从数据库mongodb中获取数据?如何在连接表中没有匹配的情况下仍然从连接查询中的表中获取数据如何在Kotlin中没有引用的情况下侦听来自另一个类的变量如何在没有json的情况下从jquery数据属性中获取对象名值
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

批处理教程pdf_批处理怎么用

使用set设置环境变量只在当前进程及其继承进程有效,并且是临时进程关闭重启之后失效。...批处理解释代码时,是先读出当前行代码并解析,for及之后代码也是一次加载并解释。这就导致for之后代码变量设置了并没有立即生效。如果想要立即生效,需要启用变量延迟。...在批处理默认输出即为STDOUT,可以省略。 Rem 以下两句等价,将IP信息STDOUT转到文件info.txt。...& , <& < 文件而不是键盘读入命令输入。 >& 将一个句柄输出写入到另一个句柄输入。 <& 从一个句柄读取输入并将其写入到另一个句柄输出。 3.13....Windows每一个进程退出都有退出码。 Win32有API,exit(exitCode)设置当前进程退出码。 Python也能够通过os.exit(exitCode)来设置退出码。

2.1K20

Linux进程间通信 信号

作为一种进程间通信基本形式,进程也可以给另一个进程发送信号。 --《linux系统编程》 ” 如上所述,信号可以实现进程通信。本章主要记录信号使用方法。...如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号传递被延迟,直到其阻塞被 取消时才被传递给进程。...进程越界,或企图写一个只读内存区域(程序正文区),或执行一个特权指令及其他各种硬件错误。 与在系统调用期间遇到不可恢复条件相关信号。...执行系统调用exec时,原有资源已经释放,而目前系统资源又已经耗尽。 与执行系统调用时遇到非预测错误条件相关信号。执行一个并不存在系统调用。 在用户态下进程发出信号。...捕获并处理信号 类似于硬件中断处理,内核会暂停正在执行程序,并跳转到注册信号响应处理函数中去。一旦处理完毕,会继续执行中断前操作。

2.5K10
  • win32 api函数_c调用webapi接口

    前言 如果要在Windows上面写程序,就不得不了解一些 Win32Api 使用,Win32 Api 在 C / C++环境中使用非常方便,直接调用头文件 ...使用就行了,但在 C#不会这么简单,需要在指定模块之中导入想要Win32,下面我们来学习一下如何在C#之中使用Win32 Api . . . ---- 在测试Win32 Api 之前,我先教大家如何获取有窗口进程信息...,代码如下: 有窗口进程,它窗口句柄不会为 0,所以我们只需在所有运行程序之中判断一下即可,下面是效果: 这些都是我所运行有窗口进程 . . . ---- Win32 Api 使用 首先我们准备一个额外窗口...,用于测试 Api: 准备两个按钮,一个用于显示上面的窗口,另一个用于测试 Api: 导入 Win32 Api: User32 表示导入 Api所在模块 CharSet 表示字符集 下面的是一个...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.3K20

    解锁FlutterProcessResult:让外部命令执行变得轻松

    ('ls', ['-l']); // 打印命令执行结果 print(result.stdout);}处理外部命令输出另一个常见使用场景是处理外部命令输出。...如果标准错误信息不为空,则打印错误信息;否则,打印命令执行成功消息。通过这些示例,我们可以更好地理解如何在 Flutter 应用程序调用外部命令,并处理命令执行结果。...在这种情况下,我们可以通过捕获异常来处理错误,并根据需要进行相应操作。...如果命令执行过程中出现异常,我们将捕获异常信息打印出来。通过这些进阶用法示例,我们可以更好地掌握如何在 Flutter 应用程序异步执行外部命令,并处理可能出现错误和异常情况。...建议使用 try...catch 块来捕获可能发生异常,并根据需要进行相应处理。及时释放资源:在使用完 ProcessResult 后,及时释放相关资源,比如关闭进程或者清理临时文件等。

    49610

    pythonsubprocess模块

    但是Python 2.4开始官方文档建议使用是subprocess模块,所以os模块和commands模块相关函数在这里只提供一个简单使用示例,我们重要要介绍是subprocess模块。...通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了 ​ stdout: 从子进程捕获stdout。...如果run()函数被调用时指定 ​ ​stderr=subprocess.STDOUT,那么stdout和stderr将会被整合到这一个属性,且stderr将会为None stderr: 从子进程捕获...通过为stdin, stdout和stderr传递不同参数。 subprocess.Popen(): 在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。...,作为另一个进程输入: import subprocess ​ child1 = subprocess.Popen(["cat","/etc/passwd"], stdout=subprocess.PIPE

    3K20

    深入理解Node.js进程与子进程

    uncaughtException 事件Nodejs 可以通过 try-catch 来捕获异常。如果异常未捕获,则会一直底向事件循环冒泡。...捕获了错误信息,并且进程以0退出。开发者可以在 uncaughtException 事件,清除一些已经分配资源(文件描述符、句柄等),不推荐在其中重启进程。...相关nodejs进阶视频讲解:进入学习unhandledRejection 事件如果一个 Promise 回调异常没有被.catch()捕获,那么就会触发 process unhandledRejection...: 我是父进程独立子进程在正常情况下,父进程一定会等待子进程退出后,才退出。...默认情况下,子进程 stdin、 stdout 和 stderr 会被重定向到 ChildProcess 对象上相应 subprocess.stdin、subprocess.stdout 和 subprocess.stderr

    2K21

    Week4-脚手架命令注册和执行过程开发

    5-1 进程基本概念(讲解在操作系统如何查看进程嵌套关系) 官方文档中文版: http://nodejs.cn/api/child_process.html 进程进程(Process)是计算机程序关于某数据集合上一次运行活动...第二,进程是一个“执行程序”,存在嵌套关系 Node进程存在感知: 终端输入:ps -ef | grep node 命令。...参数传递是 exec/lib/index.jsrequire传递过来,因此参数传递修改 require(rootFile).apply(null,arguments); //修改为 require...没有捕获,需要在core/exec/lib/index.jsrequire这个targetPath文件进行try catch捕获。...继续往后该方法第6行,spwan方法调用child.spwan拓扑图所示,真正调用是internal/child_processspawn–>this.

    91820

    操作系统概念学习笔记 9 线程

    多对多模型没有这两者缺点:开发人员可创建任意多用户线程,并且相应内核线程能在多处理器系统上并发执行。而且当一个线程执行阻塞系统调用时,内核能调度另一个线程来执行。...而对于Java没有全局数据概念,在Java程序如果两个或更多线程需要共享数据,通过向相应线程传递对共享对象引用来实现。...如果调用fork()之后立即调用exec(),那么没有必要复制所有线程,因为exec()参数所指定程序会替换整个进程。在这种情况下,只复制调用线程比较适当。...这种信号例子包括使用特殊键(Ctrl + C)或者定时器到期。通常,异步信号被发送到另一个进程。...信号可以按照不同方式处理。有的信号可以简单忽略(改变窗口大小),有的需要终止程序来处理(非法内存访问) 单线程程序信号处理比较直接,信号总是发送给进程

    53920

    Python模块学习:subprocess模块详解

    ;check_output()函数默认就会返回命令执行结果,所以不用设置stdout值,如果我们希望在结果捕获错误信息,可以执行stderr=subprocess.STDOUT。...通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了stdout: 从子进程捕获stdout。...如果run()函数被调用时指定stderr=subprocess.STDOUT,那么stdout和stderr将会被整合到这一个属性,且stderr将会为Nonestderr: 从子进程捕获stderr...关于communicate()方法说明:该方法可选参数 input 应该是将被发送给子进程数据,或者没有数据发送给子进程,该参数应该是None。...如果在timeout指定秒数后该进程没有结束,将会抛出一个TimeoutExpired异常。捕获这个异常,然后重新尝试通信不会丢失任何输出数据。

    71540

    几种服务器端IO模型简单介绍及实现(上)

    一些概念: 同步和异步 同步和异步是针对应用程序和内核交互而言,同步指的是用户进程触发I/O操作并等待或者轮询去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己事情,而当...多线程(或多进程目的是让每个连接都拥有独立线程(或进程),这样任何一个连接阻塞都不会影响其他连接。...另一个问题,在循环调用非阻塞IO时候,将大幅度占用CPU,所以一般使用select等来检测”是否可以操作“。...代码可以看出使用Select返回后,仍然需要轮训再检测每个socket状态(读、写),这样轮训检测在大量连接下也是效率不高。...很多操作系统提供了更为高效接口, linux 提供 了 epoll,BSD 提供了 kqueue,Solaris 提供了 /dev/poll …。

    89670

    几种服务器端IO模型简单介绍及实现(上)

    一些概念: 同步和异步 同步和异步是针对应用程序和内核交互而言,同步指的是用户进程触发I/O操作并等待或者轮询去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己事情,而当...多线程(或多进程目的是让每个连接都拥有独立线程(或进程),这样任何一个连接阻塞都不会影响其他连接。...另一个问题,在循环调用非阻塞IO时候,将大幅度占用CPU,所以一般使用select等来检测”是否可以操作“。...代码可以看出使用Select返回后,仍然需要轮训再检测每个socket状态(读、写),这样轮训检测在大量连接下也是效率不高。...很多操作系统提供了更为高效接口, linux 提供 了 epoll,BSD 提供了 kqueue,Solaris 提供了 /dev/poll …。

    1K80

    Python subprocess与命令行交互

    虽然可以使用 subprocess.run在一个线程启动一个子进程,并在另一个线程与其交互。 但是,当完成了子进程之后,要完全终止它将变得非常棘手。...样品肉发生在最后一块。 terminate()向子进程发送一个 SIGTERM 信号。 然后,proc.communicate等待子进程退出并捕获所有的标准输出。...Communicate 有一个非常方便超时参数,让知道子进程是否由于某种原因没有退出。...Linux 进程通常在交互模式下进行行缓冲,否则进行全缓冲。 很少有进程是完全不缓冲。 因此,在看来,不建议在小于一行读取 stdout。 真的,千万别这么做。...如果不想仅仅打印捕获 stdout,而是要对其进行处理(比如寻找预期模式) ,那么可以使用 Python 线程安全队列进行组织。

    7.6K22

    何在控制台程序监听 Windows 前台窗口变化

    本文会介绍两类知识,一类是如何在 .NET/C# 程序中方便地调用 Win32 API,另一类是在控制台程序开启 Windows 消息循环。...,这意味着该事件钩子函数可以捕获其他进程中发生事件 WINEVENT_SKIPOWNPROCESS 表示忽略进程自身发生事件(当然,我们是控制台程序,没有窗口,所以这个传不传没有区别) 随后,我们开启了消息循环...这些是我们刚刚已经用以及即将使用 Win32 函数和常量。...,那么就可以得到下面的效果: 关于如何在控制台中输出表格(并实现中英文字符对齐显示),可以阅读我另一篇博客。....NET/C# 程序如何在控制台/终端以字符表格形式输出数据 - walterlv 开源项目 本文代码已经开源在 GitHub 上,感兴趣可以去项目中阅读更新代码: https://github.com

    1.3K20

    Kubernetes 中分析调试网络流量4种方式

    要克服第一个问题是Kubernetes podtcpdump命令可用性。KIE服务器容器映像没有安装tcpdump。其次,容器不提供Red Hat存储库安装tcpdump实用程序。...一个pod运行Business Central workbench,另一个pod是执行服务器pod。这两个组件之间通信是通过REST完成,这是我们将要捕获流量。...其中一个问题是,tcpdump向stderr发送信息消息,但是这些消息与stdout在相同, 并且是通过SSH接收,从而破坏了进入Wireshark数据。...在这个例子,我正在分析我HTTP POST方法,它创建了Mortgage 进程一个新实例: 总结 在容器环境(Kubernetes和/或OpenShift)中分析pod之间网络通信可能比在非容器环境更困难一些...使用像oc rsh和oc cp这样OpenShift工具,我展示了如何轻松地pod捕获网络流量数据并将数据带到开发机器进行分析。

    1.3K50

    WindowsAPI 之 CreatePipe、CreateProcess

    大多数命令行程序stdin输入,输出到stdout或 stderr,有时我们需要重定向stdout,stderr,stdin。...一个管道类似于一个管子两端,一端是写入,一端是读出。由一个进程写入端写入、另一个进程读出端读出,从而实现通信,就向一个“管道”一样。...重定向stderr和stdout是相同。 同理,要重定向stdin的话,生成一个管道, 管道写入端由主程序写,子进程管道读出端读数据。...管道缓冲已满而数据还没有写 完,WriteFile()将要等到另一进程对管道数据读取以释放出更多可用空间后才能够返回。...在生成子进程之前,父进程首先调用Win32 API SetStdHandle()使子进程、父进程可共用标准输入、标准输出和标准错误句柄(StdOut、StdIn、StdErr)。

    4.1K10

    Pythonos.system()、subprocess.run()、call()、check_output()用法

    , stderr: 用于指定标准IO文件句柄,可以是: subprocess.PIPE: 用作 stdout, stderr 参数值时,可以返回值对象 stdout 和 stderr...、stderr 会以“文本”模式打开(返回值对象 stdout、stderr 存储文本内容),否则返回值对象 stdout、stderr 存储是字节序列env: 用于设置程序执行时继承环境变量等...,默认与当前进程相同该方法返回一个 CompletedProcess 对象,其中包含以下属性:returncode: 执行命令退出码stdout捕获标准输出内容(当 stdout 参数为 PIPE...re.match("stderr output", ret.stderr) # 如果 cmd 命令不存在,这里是捕获不到,subprocess.run()自己就会报错 ret...stdout ,因为这个函数返回值默认就是标准输出内容,也可以将设置 stderr=subprocess.STDOUT 将标准错误重定向到标准输出,但是好像没有办法单独捕获标准错误内容呢!

    73820
    领券