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

为什么当stderr重定向到管道时,boost::process会在Windows上崩溃?

当stderr重定向到管道时,boost::process在Windows上可能会崩溃的原因是由于Windows操作系统的特殊性导致的。Windows上的管道实现方式与Unix/Linux上的管道有所不同,这可能导致boost::process在处理stderr重定向时出现问题。

在Windows上,管道是通过创建匿名的命名管道来实现的,而boost::process在处理stderr重定向时可能会使用一些与Unix/Linux上不兼容的方法或函数。这可能会导致在重定向stderr到管道时出现错误或崩溃。

为了解决这个问题,可以尝试以下几种方法:

  1. 使用其他的库或工具来实现stderr重定向,例如Windows API中的CreatePipe函数和SetStdHandle函数,或者使用其他第三方库如WinAPIWrapper等。
  2. 在使用boost::process时,避免将stderr重定向到管道,可以将其重定向到文件或直接输出到控制台。
  3. 检查boost::process的版本和相关的依赖库是否有更新或修复了这个问题的版本。有时候问题可能是由于旧版本的bug引起的,升级到最新版本可能会解决问题。

需要注意的是,由于不提及具体的云计算品牌商,无法提供与腾讯云相关的产品和产品介绍链接地址。但可以参考腾讯云的文档和相关资源,查找与云计算、开发工具、操作系统等相关的解决方案和技术支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python重定向标准输入、标准输出和标

当你 print 某东西,结果输出到 stdout 管道中;当你的程序崩溃并打印出调试信息(象Python中的错误跟踪),结果输出到 stderr 管道中。...通常这两个管道只与你正在工作的终端窗口相联,所以一个程序打印输出,你可以看到输出,并且一个程序崩溃,你可以看到调试信息。...将我们新打开的日志文件的文件对象赋给 stderr 重定向标准错误。 引发一个异常。从屏幕输出上我们可以注意这样没有在屏幕打印出任何东西。所以正常跟踪信息已经写进 error.log。...(Windows用户应该使用 type 代替 cat。) 这样会打印 binary.xml 的内容,但是“|”字符,叫做管道符,表示输出内容不会打印到屏幕。...我们要做的只是能够从标准输入中接收语法文件,并且我们可以将所有其它的逻辑分散另一个程序中。 那么语法文件是“-”我们的脚本是如何中从标准输入读入的呢?没什么神秘的,就是编码。

4K10

WindowsAPI 之 CreatePipe、CreateProcess

大多数的命令行程序从stdin输入,输出到stdout或 stderr,有时我们需要重定向stdout,stderr,stdin。...比如:将输出写入文件,又或者我们要将命令行程序输出结果显示 Windows对话框中。 在Windows编程中,重定向需要用到管道(Pipe)的概念。管道是一种用于在进程间共享数据的机制。...重定向stderr和stdout是相同的。 同理,要重定向stdin的话,生成一个管道管道的写入端由主程序写,子进程从管道的读出端读数据。...比如一个控制台程序打印一行文字: 图片 会在windows弹出的对话框中输出: 图片 为什么会输出到这里而不是别的地方呢?因为这里就是所说的StdOut(标准输出)的地方。...父进程向子进程发送数据,用SetStdHandle()将 管道的读句柄赋予标准输入句柄(这样就不会从标准输入读入数据,而从读句柄所表示的位置读取数据);在从子进程接收数据,则用SetStdHandle

4.1K10
  • Python中os.system()、subprocess.run()、call()、check_output()的用法

    相当于把标准错误重定向标准输入中) subprocess.DEVNULL: 用作 stdout, stderr 参数的值,相当于把输出内容重定向 /dev/null 用户已经打开的文件对象或描述符...(整型数字)capture_output: 设置为 True ,相当于 stdout 和 stderr 参数都设置为 True 了,可以通过返回值对象访问标准输出和标准错误内容shell: 设置为...True ,args 参数会当做一条命令字符串(支持管道重定向操作);它为 False ,args 需是一个列表(并且不支持管道重定向操作)cwd: 指定执行命令的目录,默认为当前目录timeout...会报错 stdout=subprocess.PIPE, stderr=subprocess.STDOUT # 标准错误重定向标准输出) print("STDOUT:", ret.stdout...=subprocess.STDOUT 将标准错误重定向标准输出,但是好像没有办法单独捕获标准错误内容呢!

    73620

    A Guide to Node.js Logging

    最后 stderr 则用于错误消息。如果你想了解 stderr 为什么存在以及何时使用它,可以访问:When to use STDERR instead of STDOUT。...简而言之,这允许我们使用重定向 > 和管道 | 运算符来处理与应用程序的实际结果分开的错误和诊断信息。而 > 允许我们将命令的输出重定向文件,2> 允许我们将 stderr 的输出重定向文件。...在此之前我们还需要解决一下日志信息的可读性,pino 遵循了一个理念,就是为了性能,你应该通过管道将输出的处理移动到单独的进程中,你可以去查看一下文档,了解其中 pino 的错误为什么不会写入 stderr...这些对于你的本地开发非常有用,在运行生产服务器之后,你可能希望将日志的管道转移到另外一个管道,使用 > 将它们写入硬盘以便稍后处理它们。...但如果不是,则可能会将输出重定向文件或输出到其他地方。 你可以使用 isTTY 来检查 stdout,stdin,stderr 是否在终端模式。

    1.7K20

    pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)

    经过研究,结论: os.popen 会打开一个管道执行命令,而管道是有输入(stdin)、输出(stdout) 的!...executable参数不为空,args里的第一项被认为是“命令名”,不同于真正的可执行文件的文件名,这个“命令名”是一个用来显示的名称,例如执行unix/linux下的 ps 命令,显示出来的就是这个...如果是PIPE,则表示需要创建一个新的管道,如果是 None,不会做任何重定向工作,子进程的文件描述符会继承父进程的。...(仅限Windows) 再解释一下两个我们后面要用到的东西: subprocess.PIPE 一个可以用于Popen的stdin、stdout或stderr参数的特殊值,它指示应打开到标准流的管道。...这个简单的封装,改成使用subprocess.popen,接着将subprocess.popen打开管道的输入值(stdin)重定向,即可解决问题!

    3.8K30

    第七十期:Node中的IO操作(标准IO)

    比如常见的(STDIN),(STDOUT)标准输出,以及(STDERR)标准错误等,这些都可以被重定向并通过管道传输到其他程序,以便进一步处理、存储等。...处于交互模式,每一行都代表了一个数据块儿(data chunk)。通过process输送数据,每个数据块儿都由streams流允许消耗的最大内存决定。...我们对data事件进行监听,它实际提供了一个二进制表示形式的数据,用来存储输入的数据。 接受到data事件,调用process.stdout 的 out方法就可以了。...所以进程直接连接到终端process.stdin是使用核心TTY模块的ReadStream构造函数创建的,该构造函数具有isTTY属性。...然而,I/O被重定向,通道是从网络模块的套接字构造函数创建的,它没有isTTY属性。 文件处理 fs 文件处理能力是服务端编程的一个基本能力,Node通过fs模块提供了这种能力。

    66110

    深入解析 Node.js 的 console.log

    那些是 stdin,stdout 和 stderr。 stdin 流用来在处理进程的输入。例如按下按钮或重定向输出。 stdout 流用于程序的输出。最后 stderr 用于错误消息。...简而言之,这允许我们在 shell 中使用重定向(>)和管道(|)来处理错误和诊断信息,它们是与程序的实际输出结果是分开的。...虽然 > 允许我们将命令的输出重定向文件中,但是 2> 允许我们将 stderr 的输出重定向文件中。...可以通过查看 transports 文档了解为什么 pino 中的错误不会写入 stderr。 让我们用工具 pino-pretty 来查看更易阅读的日志版本。...如果不是,则可能会将输出重定向文件或用管道传输到某处。 你可以通过检查相应流上的 isTTY 属性来检查 stdin、stdout 或 stderr 是否处于终端模式。

    2K50

    Unix-Linux编程实践教程-chapter10-io

    第10章 I/O重定向管道 输入/输出重定向允许完成特定功能的程序通过交换数据来进行相互协作 Unix默认规定程序从文件描述符0读取数据,写数据文件描述符1,将 错误信息输出到文件描述符2.这三个文件描述符称为标准输入...,标准输出 和标准错误输出 登陆Unix系统中,登陆程序设置文件描述符0,1,2.所有的连接, 文件描述符都会从父进程传递子进程.他们也会在调用exec被传递 创建文件描述符的系统调用总是使用最低可用文件描述符号...重定向标准输入,输出以及错误输出意味着改变文件描述符0,1,2的 连接.有很多种技术来重定向标准I/O 管道是内核中的一个数据队列,其每一端连接一个文件描述符.程序通过 使用pipe系统调用创建管道...父进程调用fork的时候,管道的两端都被复制子进程中 只有有共同父进程的进程之间才可以使用管道连接 两个进程都可以读写管道,但是一个进程读,另一个进程写的时候,管道的使用效率最高 code /*...* pipe.c * Demonstrates how to create a pipeline from on process to another * Takes two args, each

    52610

    python 标准类库-并行执行之subprocess-子进程管理

    bufsize 创建stdin/stdout/stderr管道文件对象,bufsize将作为io.open()函数的对应的参数: 0 - 意味着未缓冲 (means unbuffered (read...Windows平台,stdin/stdout/stderr为None,为True,否则为False。Windows平台,如果close_fds为True,那么子进程不会继承任何句柄。...警告 使用stdout=PIPE and/or stderr=PIPE,如果子进程生成足够的输出到管道,这会阻止操作系统管道缓冲区接收更多数据,进而造成死锁。...为了避免该事件,使用communicate() Popen.communicate(input=None, timeout=None) 和process交互:发送数据stdin,从stdout,stderr...函数返回一个元组(stdoutdata, stderrdata) 注意,如果想发送数据进程管道,必须在创建Popen对象使用stdin=PIPE,类似的如果想从结果元组中获取非None值数据,创建

    4.2K20

    深入理解NodeJS多进程

    shell,并在shell执行命令;spawn会在父子进程间建立IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...,它是一种半双工通信,同一间只能有一个方向的数据流。...管道本质就是内核中的一个缓存,进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。...,而是创建一个socket并发送到父进程,以此将自己注册父进程,所以只有父进程监听了端口,子进程通过socket和父进程通信,一个请求到来后,父进程会根据轮询策略选中一个子进程,然后将请求的句柄(其实就是一个...(频繁崩溃重启)等等。

    1.8K20

    理解NodeJS多进程

    shell,并在shell执行命令;spawn会在父子进程间建立IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...,它是一种半双工通信,同一间只能有一个方向的数据流。...管道本质就是内核中的一个缓存,进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。...,而是创建一个socket并发送到父进程,以此将自己注册父进程,所以只有父进程监听了端口,子进程通过socket和父进程通信,一个请求到来后,父进程会根据轮询策略选中一个子进程,然后将请求的句柄(其实就是一个...(频繁崩溃重启)等等。

    1.2K00

    Console 模块解读及简单实现

    等属性 将原型方法的属性绑定 Logger 实例 实现 log、error、warning、trace、clear 等方法 创建logger文件 const util = require('util...Object.defineProperty(this, '_times', Object.assign(props, { value: new Map(), })); // 将原型方法的属性绑定...有时可能一瞬间就能写到一个文件,但系统处于高负载管道的接收端可能不会被读取、缓慢的终端或文件系统,因为事件循环被阻塞的足够频繁且足够长的时间,这些可能会给系统性能带来消极的影响。...当你向一个交互终端会话写这可能不是个问题,但生产日志进程的输出流要特别留心。...文件(Files): Windows 和 POSIX 平台下都是同步 终端(TTYs): 在 Windows 平台下同步,在 POSIX 平台下异步 管道(Pipes): 在 Windows 平台下同步

    1.2K10
    领券