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

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

最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...这三个参数似乎就点中了标题中的两个关键字“标准输出”、“标准错误输出”。是的!我们正是靠这几个参数来解决我们所遇到的问题。那么如何使用这些参数呢?         我们选用的还是老方法——管道。...si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; // 把创建进程的标准错误输出重定向到管道输入...设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程的标准错误输出重定向到管道输入 si.hStdOutput = hWrite...我们使用STARTF_USESTDHANDLES的原因是:我们使用了标准输出和标准错误输出句柄。

3.7K10

Node.js 通过子进程操作标准输入输出

翻译:疯狂的技术宅 原文:http://2ality.com/2018/05/child-process-streams.html ,我们 Node.js 把 shell 命令作为子进程运行。...进程运行 shell 命令 首先从进程运行 shell 命令开始: 1const {onExit} = require('@rauschma/stringio'); 2const {spawn... A 行,我们将子进程的 stdin 连接到当前进程的 stdin。 B 行等待该过程完成。 等待子进程通过 Promise 退出 函数 onExit()如下所示。...B行不会 await 写完成。而是 await 子进程 sink 完成。 接下来了解 streamWrite() 的工作原理。...进程之间进行管道连接 在下面的例子,函数transform() 将会: 从 source 子进程的 stdout 读取内容。 将内容写入 sink 子进程的 stdin。

3.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Bash 如何将标准错误stderr转向标准输出stdout

将命令输出转到文件或者另外一个命令的时候,你可能会注意到错误提示打印屏幕上。 Bash 和其他 Linux shells ,当程序执行时,它使用三个标准的 I/O 流。...程序输出通常到标准输出流,而错误消息通常到标准错误流。默认情况下,输入流和错误流都打印屏幕上。 二、输出转向 转向就是将程序输出,发送到另外一个程序或者文件。...转向stdout 当保存程序输出到文件时,通常将标准错误stderr转向stdout,以便在同一个文件记录完成信息。...想要将标准错误stderr转向标准输出stdout,并且将错误信息也像标准输出一样发送到同一个文件,使用下面的命令: command > file 2>&1 > file 将标准输出stdout转向到文件... Bash &>和2>&1 一个意思: command &> file 四、总结 使用命令行的时候,理解转向和文件描述符的概念是非常重要的。

1.6K30

eBPF 入门开发实践教程八: eBPF 中使用 exitsnoop 监控进程退出事件,使用 ring buffer 向用户态打印输出

本文是 eBPF 入门开发实践教程的第八篇, eBPF 中使用 exitsnoop 监控进程退出事件。...exitsnoop本文是 eBPF 入门开发实践教程的第八篇, eBPF 中使用 exitsnoop 监控进程退出事件,并使用 ring buffer 向用户态打印输出。...我们只关心进程(主线程)的退出,因此 PID 和 TID 不同时返回 0,忽略子线程退出事件。...将进程相关信息填充到预留的事件结构体 e ,包括进程持续时间、PID、PPID、退出代码以及进程名称。...这个示例展示了如何使用 exitsnoop 和 ring buffer eBPF 程序捕获进程退出事件并将相关信息传输到用户空间。这对于分析进程退出原因和监控系统行为非常有用。

24720

eBPF 入门开发实践教程八: eBPF 中使用 exitsnoop 监控进程退出事件,使用 ring buffer 向用户态打印输出

另外,合成和真实世界的基准测试表明,几乎所有的情况下,所以考虑将其作为从BPF程序向用户空间发送数据的默认选择。...exitsnoop 本文是 eBPF 入门开发实践教程的第八篇, eBPF 中使用 exitsnoop 监控进程退出事件,并使用 ring buffer 向用户态打印输出。...本程序,注册的 tracepoint 是“tp/sched/sched_process_exit”,表示该程序监控的是进程退出事件。...该函数首先检查当前退出事件是否是进程退出事件(而不是线程退出事件),然后 BPF 环形缓冲区(“rb”)中保留一个事件结构体,并填充该结构体的其他信息,例如进程 ID、进程名称、退出代码和退出信号等信息...总而言之,这段代码是一个 BPF 程序,用于监控 Linux 系统进程退出事件.

57030

前端测试题:(解析)JavaScript能正确输出 Hello World的代码是?

考核内容: JS基础应用 题发散度: ★ 试题难度: ★ 看看大家的选择 解题: JS中常用的输出方式(五种) 1、alert("要输出的内容"); 浏览器中弹出一个对话框,然后把要输出的内容展示出来...alert都是把要输出的内容首先转换为字符串然后输出的 2、document.write("要输出的内容"); 直接的页面展示输出的内容 3、console.log("要输出的内容"); 控制台输出内容...4、value ->给文本框(表单元素)赋值内容 获取文本框(表单元素)的内容 document.getElementById("search").value = "要给#search这个文本框添加的内容...它可以当作普通字符串使用,也可以用来定义多行字符串,或者字符串嵌入变量。 模板字符串嵌入变量,需要将变量名写在${}之中。...可以看出,ABC没有这样的用法,只有D能正常使用输出; 参考: 答案: D. document.write(`Hello World`)

1.9K20

AAPT2error:checklogsfordetails解决方法(转载)

我们 Android SDK 目录下可以找到它。 AAPT2 是 AAPT 的全新版本,从 Android Studio 3.0 开始,它被作为默认的资源打包工具。...网上很多人说,可以禁用 AAPT2 以解决该错误,具体做法是: gradle.properties 文件,增加一行 “android.enableAapt2=false”。...我们看看如何在不禁用 AAPT2 的情况下解决这些错误。 首先,AAPT2 是打包资源文件的工具,如果 AAPT2 报错了,那么可以肯定是资源文件有问题(且不论AAPT2内部错误)。...image 在这种视图下,可以看清楚 gradle 的执行输出。通过 仔细翻阅 这些输出内容,我们可以分析出错误原因: ?...image 上述输出内容说明: 1)发生错误的文件是 bedit_activity.xml; 2)错误原因是 android:background 属性值不被兼容,当然有时候经常是xml属性填写错误导致

1.2K00

【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

generated 主要是处理 配置信息 , Resources 资源文件 ; output 目录主要是输出 打包 后的 APK 安装包文件 ; 这些文件是应用编译过程 , 生成的文件 , 熟悉安卓应用编译流程...SO 动态库 , 编译打包到最后的安装包 ; 之前的博客 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 ) , 讲解过..." , JDK 目录 ; 编译后的 .class 字节码文件存放在 " app\build\intermediates\javac "目录下 ; .class 字节码文件还需要使用 dx 工具...; 安卓 APK 安装包的 classes.dex 文件就是这么编译生成的 ; 三、AIDL 源码编译 ---- 如果项目中使用了 AIDL 跨进程访问 , 编译时就需要编译 AIDL 文件 ;...编译结果输出到 " app\build\generated\aidl_source_output_dir " 目录 ; 构建完整流程参考图 :

76330

AI API 开发测试的应用:如何利用 Al 提供优化建议和错误报告

Apikit ,用户只需要输入 API 的设计文档和开发规范,系统就可以根据这些信息自动生成 API 的代码和测试代码。...开发者只需要输入 API 的需求和设计文档,系统就可以自动生成 API 代码和测试代码,并进行自动化测试测试过程,系统会自动运行测试代码,并生成测试报告和异常日志。... Apikit ,用户可以通过 API 性能和覆盖率报告来获取 API 的相关信息和统计数据。同时,系统还会自动分析 API 的性能瓶颈和潜在问题,并提供相应的优化建议和错误报告。... Apikit ,用户可以通过 API 测试和性能报告来发现 API 的问题,例如响应时间过长、错误率过高等。同时,系统还可以自动分析API 的性能瓶颈和潜在问题,并提供相应的解决方案和优化建议。...分析错误原因时,系统会根据错误类型提供不同的解决方案,包括调试信息和优化建议。性能瓶颈分析时,系统也会根据优化建议是否合理判断是否需要重新分析瓶颈和潜在问题,从而提高分析的准确性。

57910

aapt与aapt2--资源id固定和PUBLIC标记

当然使用过程也会遇到一些问题,我们可以通过 gradle.properties 配置 android.enableAapt2=false 来关闭 aapt2。...Android Gradle Plugin 3.0.0,默认开启了aapt2,原先aapt的资源固定方式public.xml也将失效,必须寻找一种新的资源固定的方式,而不是简单的禁用掉aapt2,因此本文来探讨一下...aapt2进行id的固定 aapt2编译(将资源文件编译为二进制格式)后,发现merge的资源都已经经过了预编译,产生了flat文件,这时候将public.xml文件拷贝至该目录就会产生编译错误。...原因还是aapt和aapt2的差异造成的,aapt2的public.txt不等于aapt的public.xml,aapt2如果要添加PUBLIC标记,其实还是得另寻其他途径。...styleable类型资源,public.xml不存在,因此转换过程如果遇到styleable类型,需要忽略; vector矢量图资源如果存在内部资源,也需要忽略,aapt2,它的名字是以$开头

1.2K50

aapt与aapt2--资源id固定和PUBLIC标记

当然使用过程也会遇到一些问题,我们可以通过 gradle.properties 配置 android.enableAapt2=false 来关闭 aapt2。...aapt2进行id的固定 aapt2编译(将资源文件编译为二进制格式)后,发现merge的资源都已经经过了预编译,产生了flat文件,这时候将public.xml文件拷贝至该目录就会产生编译错误。...原因还是aapt和aapt2的差异造成的,aapt2的public.txt不等于aapt的public.xml,aapt2如果要添加PUBLIC标记,其实还是得另寻其他途径。...public.txt存在styleable类型资源,public.xml不存在,因此转换过程如果遇到styleable类型,需要忽略; vector矢量图资源如果存在内部资源,也需要忽略,aapt2...,它的名字是以开头,然后是主资源名,紧跟着__数字递增索引,这些资源外部是无法引用到的,只需要固定id,不需要添加PUBLIC标记,并且符号public.xml是非法的,因此忽略它即可; 由于aapt2

2.3K20

从构建工具看 Android APK 编译打包流程

Android Studio,又是由谁来调度这些工具的呢?Gradle构建工具。...所以AAPT2用到链接的功能,当修改了某个资源文件之后,只需要重新编译这个改变的文件,然后与其他资源进行链接即可,支持了增量更新,大大提升了效率。...比如 1)、以前的AAPT版本,Android 清单文件中出现错误的节点元素只会被忽略或警告,而AAPT2开始会对这些节点进行报错,比如: <activity android:name=".MainActivity...4)、@ 资源引用符号使用严格 对于遗漏或者<em>错误</em>引用@(资源引用符号)时候,<em>AAPT2</em>会报错。...5)、库配置不正确 当某些库创建过程<em>中</em>R文件字段声明为final会导致报错,<em>AAPT2</em>就会对这种情况进行优化。

3.6K30

Android 大型工程 App Bundle 模块化实践

Android App Bundle 描述非常恰当: 提升工程速度 将应用功能作为独立模块进行设计、构建、调试和测试,并在准备就绪后将其添加到主应用。...提升工程速度 旧的模块化开发,工程类型只有应用(application)和库模块(library)2种类型,新的模块化开发,增加了第3种动态模块(dynamic feature)类型。...增量编译 单个编译任务和它采用的工具,内部控制输入、输出的增量关系和产物。...由于缺少 Git-Flow 的隔离,并行开发会导致: 单个编译错误也可能造成集成失败,影响全员开发、测试 模块并发修改、缓存大量失效,在拉取代码更新后造成效率急剧下降 阶段三重构目的就是,通过增强模块隔离性...利用 .aab 缓存和预分配 feature 构建,不必企业微信工程编译后集成测试,仍保持了真实用户运行环境。 ?

4.5K31

Dcoker 容器环境下 Node.js 应用程序的优雅退出

—— 卡曾斯 Dcoker 容器环境下 Node.js 应用程序的优雅退出,也就是程序意外退出之后服务进程要接收到 SIGTERM 信号,待当前链接处理完成之后再退出,这样是比较优雅的,但是 Docker...做一个测试,我开始请求接口,控制台执行 curl http://localhost:30010/delay 请求,同时我又新打开另一个控制台立即执行 kill -15 68970 这个时间是 5 秒之内...,并没有按照我的预期正常退出,而是报出了 curl: (52) Empty reply from server 错误,显然我的 Node.js 应用没有接收到退出信息,随着容器的销毁被强制退出了,什么原因呢... Docker 多个容器(Container)间的进程是相互隔离的,例如,Container1 我有个 init 进程 PID=1,Container2 同样也是,因此,容器与其它容器及其主机是隔离的...Egg 框架的项目中进行测试时,并没有如上的这些问题,以下是容器内打印的进程树,可以看到 npm 的进程 id 为 1,之后就直接为 node 进程,这应该是框架内自己做的处理,感兴趣的可以去研究下实现机制

1.2K10

Docker 容器环境下 Node.js 应用程序的优雅退出

—— 卡曾斯 Docker 容器环境下 Node.js 应用程序的优雅退出,也就是程序意外退出之后服务进程要接收到 SIGTERM 信号,待当前链接处理完成之后再退出,这样是比较优雅的,但是 Docker...做一个测试,我开始请求接口,控制台执行 curl http://localhost:30010/delay 请求,同时我又新打开另一个控制台立即执行 kill -15 68970 这个时间是 5 秒之内...,并没有按照我的预期正常退出,而是报出了 curl: (52) Empty reply from server 错误,显然我的 Node.js 应用没有接收到退出信息,随着容器的销毁被强制退出了,什么原因呢... Docker 多个容器(Container)间的进程是相互隔离的,例如,Container1 我有个 init 进程 PID=1,Container2 同样也是,因此,容器与其它容器及其主机是隔离的...Egg 框架的项目中进行测试时,并没有如上的这些问题,以下是容器内打印的进程树,可以看到 npm 的进程 id 为 1,之后就直接为 node 进程,这应该是框架内自己做的处理,感兴趣的可以去研究下实现机制

1.8K00
领券