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

管道stdout和stderr到shell脚本中的两个不同进程?

管道stdout和stderr到shell脚本中的两个不同进程是指将标准输出(stdout)和标准错误(stderr)分别重定向到不同的进程中进行处理。

在shell脚本中,可以使用管道符(|)将命令的输出传递给另一个命令进行处理。默认情况下,管道只会将标准输出(stdout)传递给下一个命令,而标准错误(stderr)会直接显示在终端上。但是有时候我们希望将标准错误也传递给另一个进程进行处理。

为了实现将stdout和stderr分别传递给不同进程,可以使用重定向符号(>)和文件描述符。具体步骤如下:

  1. 将标准输出(stdout)重定向到一个临时文件,例如/tmp/stdout.log:command > /tmp/stdout.log
  2. 将标准错误(stderr)重定向到标准输出(stdout):command 2>&1
  3. 使用管道将临时文件中的内容传递给另一个进程进行处理:cat /tmp/stdout.log | another_command

通过以上步骤,我们可以将stdout和stderr分别传递给不同的进程进行处理。这在一些需要对输出进行不同处理的场景中非常有用,例如将标准输出保存到日志文件中,同时将标准错误发送给管理员进行通知。

腾讯云相关产品推荐:

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

相关·内容

正确使用python调用shell姿势

一方面shell脚本量变大就会比较难以工程化,维护阅读,另外一个重要原因是shell不具备正经编程语言所具备丰富一些类库,比如说map类型必须得bash版本4.x以上才有,或者有序list什么也没有...输出123 我们可以看到popen方法可以获取命令执行后到输入结果,但这还是有缺陷,我们知道在linux里面,有标准0,1,2来代表标准输入,输出错误,现在只有stdout没有其他两个变量还是有限制...stderr 方式三:看到上面这些这么繁琐调用,后面就又有了最强大subprocess模块,subprocess模块出现是用来替代OS模块system()popen()方法,官方推荐是只用...wait(timeout): 等待子进程终止。communicate(input,timeout): 进程交互,发送读取数据。send_signal(singnal): 发送信号进程 。...terminate(): 停止子进程,也就是发送SIGTERM信号进程。kill(): 杀死子进程。发送 SIGKILL 信号进程

7.5K20

使用python执行shell脚本 并动态传参 及subprocess使用详解

最近工作需求 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subprocess...如果args是一个序列,则第一个项目指定命令字符串,并且任何其他项目将被视为附加shell参数。 可以先创建一个简单shell脚本 a.sh 1 2 分别代表传进脚本 第一个第二个参数 ?...另外,stderr 可以是STDOUT,它表示应用程序stderr数据应该被捕获到与stdout相同文件句柄。...在Popen对象,可以设值subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程标准输出 preexec_fn 如果将preexec_fn设置为可调用对象...返回returncode Popen.communicate(input=None) 将信息输入进程,从stdoutstderr读取数据,直到达到文件结尾。等待进程终止。

5.4K30

nodejs写bash脚本终极方案!

◆ 前言 最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义变量shell变量没有定义,仍然是可以使用,但是它结果可能不是你所预期。...exec:启动一个子进程来执行命令,与spawn不同是,它有一个回调函数能知道子进程情况 execFile:启动一子进程来执行可执行文件 fork:与spawn类似,不同点是它需要指定子进程需要需执行...., stdout:..., stderr:... } 对象)。 # 否则,这将返回子进程对象,并且回调接收参数(代码、标准输出、标准错误)。...注意: __filename & __dirname这两个变量是在commonjs。我们用是.mjs结尾es6 模块。...在ESM模块,Node.js 不提供__filename __dirname 全局变量。

3.9K20

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

windows下,只有当你要执行命令是shell内建命令(比如dir,copy等) 时,你才需要指定shell=True,而当你要执行一个基于命令行批处理脚本(bat啥时候,不需要指定此项。...stdin、stdoutstderr分别表示子程序标准输入、标准输出标准错误。 可选值有PIPE或者一个有效文件描述符(其实是个正整数)或者一个文件对象,还有None。...另外,stderr值还可以是STDOUT,表示子进程标准错误也输出到标准输出。 如果把preexec_fn设置为一个可调用对象(比如函数),就会在子进程被执行前被调用。...如果把universal_newlines设置成True,则子进程stdoutstderr被视为文本对象,并且不管是unix/linux换行符(’\n’),还是老mac格式换行符(’\r’),还是...(仅限Windows) 再解释一下两个我们后面要用到东西: subprocess.PIPE 一个可以用于Popenstdin、stdoutstderr参数特殊值,它指示应打开到标准流管道

3.7K30

nodejs 写 bash 脚本终极方案!

前言 最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义变量shell变量没有定义,仍然是可以使用,但是它结果可能不是你所预期。...exec:启动一个子进程来执行命令,与spawn不同是,它有一个回调函数能知道子进程情况 execFile:启动一子进程来执行可执行文件 fork:与spawn类似,不同点是它需要指定子进程需要需执行...., stdout:..., stderr:... } 对象)。 # 否则,这将返回子进程对象,并且回调接收参数(代码、标准输出、标准错误)。...注意: __filename & __dirname这两个变量是在commonjs。我们用是.mjs结尾es6 模块。...在ESM模块,Node.js 不提供__filename __dirname 全局变量。

2.5K20

Python 执行系统命令

用法: os.popen(command[, mode[, bufsize]]) os.system(cmd) 或 os.popen(cmd),前者返回值是脚本退出状态码,后者返回值是脚本执行过程输出内容...在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。在另一些场景,我们需要先进入某个输入环境,然后再执行一系列指令等。...,NONE表示不进行重定向,继承父进程,PIPE表示创建管道 stdout 程序标准输出句柄,参数意义同上 stderr 程序标准错误句柄,参数意义同上,特殊,可以设置成STDOUT,表示与标准输出一致...3、Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdoutstderr读取数据。可选参数input指定发送到子进程参数。...同样,如果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。 4、Popen.send_signal(signal):向子进程发送信号。

1.6K10

python正向连接后门

新建一个socket,并将0、1、2分别代表系统stdin、stdoutstderr(标准输入、输出、错误)重定向socket,然后开启一个shell。...这样我们从socket传来命令就会进入系统标准输入(就跟键盘输入效果一样了),系统输出错误就会重定向socket,被我们客户端获取。...客户端连接上以后,就开启一个shell进程,然后把进程标准输入输出错误(stdin、stdoutstderr)都重定向管道,通过管道python程序连接,pysubprocess库已为我们封装好了这个功能...,专门读取管道数据 4.不使用管道,直接把shell输入输出定向socket。...直接在popen时候,将新建进程stdin、stdoutstderr都重定向socket。这样就可以不使用管道通信了。这也是C语言下零管道后门原理。

1.4K31

Linux Shell 1>devnull 2>&1 含义

cmd >a 2>a :stdoutstderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdoutstderr互相覆盖。...cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。...两者不同点在于: cmd >a 2>a 相当于使用了FD1、FD2两个互相竞争使用文件 a 管道; cmd >a 2>&1 只使用了一个管道FD1,但已经包括了stdoutstderr。...在shell,每个进程三个系统文件 相关联:标准输入stdin,标准输出stdout、标准错误stderr,三个系统文件文件描述符分别为0,1、2。...linux shell "2>&1"含义脚本是: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于&1 更准确说应该是文件描述符 1,而1 一般代表就是

2.2K20

Python Subprocess库详解

以下是一个使用管道连接两个进程例子: pythonCopy codeimport subprocess process1 = subprocess.Popen(['ls', '-l'], stdout...使用shell参数执行复杂命令 有时候,你可能需要执行包含管道、重定向其他Shell功能复杂命令。..., stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) 在这个例子,subprocess.DEVNULL将子进程标准输出标准错误输出都重定向空设备...使用subprocess.Popenstdoutstderr参数进行输出流重定向 subprocess.Popenstdoutstderr参数允许你将子进程标准输出标准错误输出重定向文件或其他地方...结论 subprocess模块提供了多个函数常量,用于更方便地执行子进程。通过灵活使用这些函数常量,你可以满足不同需求,从而更有效地管理控制子进程

1.5K21

pythonsubprocess模块

如果run()函数被调用时指定 ​ ​stderr=subprocess.STDOUT,那么stdoutstderr将会被整合到这一个属性,且stderr将会为None stderr: 从子进程捕获...需要说明是,该方法在python3.x才有。 call()方法启动进程,其标准输入输出会绑定进程输入输出。调用程序无法获取命令输出结果。...如通过为stdin, stdoutstderr传递不同参数。 subprocess.Popen(): 在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。...:发送数据stdin,并从stdoutstderr读数据,直到收到EOF。...stdout pythonshell两个进程不能独立通信,必须通过操作系统提供管道 ​ 用管道可以把结果存到stdin stdout stderr ​ subprocess.popen('ifconfig

3K20

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

因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...为了避免该事件,使用communicate() Popen.communicate(input=None, timeout=None) process交互:发送数据stdin,从stdout,stderr...函数返回一个元组(stdoutdata, stderrdata) 注意,如果想发送数据进程管道,必须在创建Popen对象时使用stdin=PIPE,类似的如果想从结果元组获取非None值数据,创建

4K20

pythonsubprocess

python2.7 源码注释(由于能力有限,翻译不太准确): 这个模块允许您开启进程、连接输入、输出错误管道,并获取他们返回代码。...默认值为bufsize是0(无缓冲)。 stdin、stdoutstderr分别指定执行程序标准输入,标准输出标准错误。有效值是PIPE,现有的文件描述符(正整数),现有文件对象,None。...PIPE创建一个新管道。None,没有重定向;子管道将会继承父管道文件句柄。此外,标准错误可以用STDOUT来定义,表明应用程序应该从STDOUT捕获到相同文件句柄标准错误数据。...()在被调用过程返回一个非零返回码则会抛出‘CalledProcessError’ 安全 ============== 其他popen函数不同,它不会隐式执行/bin/sh,这意味着所有的字符,...这个属性是提供输入进程一个文件对象,否则为None stdout     如果stdout参数是PIPE , 这个属性是提供输出到子进程一个文件对象,否则为None stderr      如果stderr

1.6K30

python模块之subprocess类与常量

stdin, stdout, stderr参数特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数特殊值,表示重定向标准错误标准输出 Popen 在一个新进程执行子程序...bufsize:创建stdin/stdout/stderr管道文件对象时作为对应参数传递给open()函数。...子进程文件句柄继承自父进程。除此之外,stderr还可以是STDOUT,表示标准错误输出重定向标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程程序执行。...communicate(input=None, timeout=None):进程交互:发送数据stdin,读取stdoutstderr数据知道读取到结束符。...类似的,返回tuple如果希望是非None,需要设置stdout=PIPE/或stderr=PIPE。

2.4K10

linux shell指令大全整理

linux shell指令 shell是一种脚本语言, 需要有编译器执行 bash是linux下默认shell sh是unix下默认shell 在ubuntubashsh都可用 执行.../test.sh 变量类型 局部变量 在脚本定义, 仅在当前shell中有效, 其他shell不能访问 环境变量 所有程序, 包括shell启动程序, 都能访问环境变量, 在c通过system()...双引号优点: 双引号里可以有变量 双引号里可以出现转义字符 shell文件包含 Shell 也可以包含外部脚本,将外部脚本内容合并到当前脚本 . filename #或 source filename...标准错误文件(stderr):stderr文件描述符为2,Unix程序会向stderr写入错误信息。...如果希望stderr重定向file, 可以这样写, 在>前加2 command 2>file 标准错误文件 stdout stderr 合并后重定向 file command > file 2>

1.6K50

subprocess:Python创建子进程

对于run()函数启动进程,它标准输入输出通道会绑定进程输入输出。这说明调用程序无法捕获命令输出。不过,我们可以通过为stdoutstderr参数传入PIPE来捕获输出,以备以后处理。...通过Shell返回消息 本例会通过一个子shell运行命令,在命令返回错误码并退出之前,将详细输入控制台。...('gbk')) 运行之后,效果如下: 这里我们输入了一个错误命令,可以看到因为命令错误,并没有输出命令执行结果,064间就是completed.stdout,为空。...这是因为我们设置了stdoutstderr为subprocess.PIPE,表明这些通道要开放。这样我们才能获取子shell运行结果获取所运行错误提示。...连接管道段 在Linux系统,我们可以将多个命令连接成一个管线,即可以把它们输入输出串联在一起。

47970

SHELL(bash)脚本编程三:重定向

在这一篇,我们介绍了一点关于输入输出重定向管道基础知识,本篇将继续重定向的话题。 在开始前,先说一说shell引用。...(历史扩展,下篇叙述)只用在交互式shell脚本无法进行历史记录扩展。.../stdout exec 4>./stderr #转移标准输出到3号描述符,关闭原来1号文件描述符。 exec 1>&3- #转移标准错误4号描述符,关闭原来2号文件描述符。.../test.sh 28653 命令标准输出标准输入通过双向管道分别连接到当前shell两个文件描述符, 然后文件描述符又分别赋值给了数组元素NAME[0]NAME[1] root bin daemon...匿名管道只能用于具有亲缘关系进程之间。 命名管道可以用在两个不相关进程之间,可以使用命令mknod或mkfifo来创建命名管道

1.6K30
领券