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

你如何在Perl中同时捕获stderr,stdout和退出代码?

在Perl中,通常通过capture函数同时捕获stderr, stdout和退出代码。这是一个基本示例:

代码语言:perl
复制
my $output = `/path/to/command 2>&1`;
if ($output =~ /(Success|Failure))/ {
    my $error = $2
    ...
}

在上述示例中:

  • /path/to/command 2>&1command 执行的输出同时重定向到 stderrstdout,即 stderrstdout 的结果将被捕获。
  • if ($output =~ /(Success|Failure))/$output 匹配 /Success/Failure,如果匹配到,则捕获该结果并赋值给 $error 变量。
  • $error现在存储了stderrstdout中捕获到的任意错误。

需要注意的是,由于操作系统的限制,在不同的操作系统中,命令的解释和执行方式不同,因此使用 $output 可以捕获到 command 的输出,但是不一定包含了 stderrstdout 的内容。另外,如果 command 是一个脚本或命令,则需要确保命令执行成功(无错)才能捕获退出代码。

综上所述, 使用重定向操作符 >1>&2 可以同时捕获stderrstdout,然后再使用匹配正则表达式或其他方法捕获并保存任意错误信息和退出代码。

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

相关·内容

Ruby执行shell命令的六种方法

在Ruby,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。...通过检测退出的状态码我们可以在ruby脚本抛出异常或者进行重试操作。 注:在Unix-like系统中进程的退出状态码以0非0表示,0代表成功,非0代表失败。...使用反引号的一个结果就是我们只能得到标准的输出(stdout)而不能得到标准的错误信息(stderr),比如下面的例子,我们执行一个输出错误字符串的perl脚本。...IO#popen IO#popen也是一种执行命令的方法,其命令也是在另外的进程执行。使用popen可以像操作IO对象一样处理标准输入输出。...也可以通过Process::waitpid2 加上对应的进程ID获得进程退出状态。但是前提是要安装open4的gem。

3.1K20

Python Subprocess库详解

我们使用stdout=subprocess.PIPEstderr=subprocess.PIPE参数将子进程的标准输出标准错误输出捕获到父进程,然后通过循环实时读取输出。...) 在这个例子,使用with语句确保在退出代码块时,subprocess.Popen对象被正确地关闭清理。...使用subprocess.DEVNULL避免输出 如果不关心子进程的输出,可以将stdoutstderr参数设置为subprocess.DEVNULL。...使用subprocess.Popen的stdoutstderr参数进行输出流重定向 subprocess.Popen的stdoutstderr参数允许将子进程的标准输出标准错误输出重定向到文件或其他地方...) 在这个例子stdout参数被设置为一个打开的文件对象,将ls -l命令的标准输出写入文件,而stderr参数被设置为subprocess.PIPE,以便捕获标准错误输出。

88621

python的sys模块函数

但是如果需要中途退出程序, 可以调用sys.exit 函数, 它带有一个可选的整数参数返回给调用它的程序. 这意味着可以在主程序捕获对sys.exit 的调用。...(注:0是正常退出,其他为不正常,可抛异常事件供捕获!)...也可以替换它们, 这时候就可以重定向输出输入到其它设备( device ), 或者以非标准的方式处理它们 从网上摘抄的文章,供大家参考: testing stdout print ‘Hello...我们在Python运行环境输入以下代码: import sys for f in (sys.stdin, sys.stdout, sys.stderr): print f 输出为: 由此可以看出...stdin, stdout, stderr在Python无非都是文件属性的对象,他们在Python启动时自动与Shell 环境的标准输入,输出,出错关联。

87910

python模块之subprocess类与常量

stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 在一个新的进程执行子程序...除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程的程序执行。...但如果指定了encoding/errors或者text为True,将使用指定的encodingerrors以文本模式打开stdin/stdout/stderr。...类似的,返回的tuple如果希望是非None,需要设置stdout=PIPE/或stderr=PIPE。...如果为负数,表示进程因为某个信号退出 stdout捕获的子进程的标准输出,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型

2.4K10

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

从文档出发,管中窥豹,进一步认识学习 process 模块:如何处理命令参数?如何处理工作目录?如何处理异常?如何处理进程退出?...捕获了错误信息,并且进程以0退出。开发者可以在 uncaughtException 事件,清除一些已经分配的资源(文件描述符、句柄等),不推荐在其中重启进程。...一旦探测到可能导致应用性能问题,缺陷或安全隐患相关的代码实践,Node.js 就可发出告警。比如前一段代码,如果出现未被捕获的 promise 回调的异常,那么就会触发 warning 事件。...但在 nodejs 请使用 nextTick 而不是 setTimeout,前者效率更高,并且严格来说,两者创建的事件在任务队列顺序并不一样(请看前面的代码)。...默认情况下,子进程的 stdin、 stdout stderr 会被重定向到 ChildProcess 对象上相应的 subprocess.stdin、subprocess.stdout subprocess.stderr

1.8K20

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

, stderr: 用于指定标准IO文件句柄,可以是: subprocess.PIPE: 用作 stdout, stderr 参数的值时,可以从返回值对象stdout stderr...属性读取输出内容 subprocess.STDOUT: 用作 stderr 参数的值时,相当于把标准错误重定向到标准输入) subprocess.DEVNULL: 用作 stdout,...:returncode: 执行命令的退出stdout捕获的标准输出内容(当 stdout 参数为 PIPE 时)。..., ret.stdout) assert re.match("stderr output", ret.stderr) # 如果 cmd 的命令不存在,这里也是可以捕获到的,内容可能是 xxx...=subprocess.STDOUT) print("[" + ret + "]") # 输出内容包含标准输出标准错误,输出顺序在 windows 下 linux 下可能会有差异 assert

49020

Python模块学习:subprocess模块详解

check: 如果check参数的值是True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdoutstderr...run()函数默认不会捕获命令执行结果的正常输出错误输出,如果我们向获取这些内容需要传递subprocess.PIPE,然后可以通过返回的CompletedProcess类实例的stdoutstderr...;check_output()函数默认就会返回命令执行结果,所以不用设置stdout的值,如果我们希望在结果捕获错误信息,可以执行stderr=subprocess.STDOUT。...通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了stdout: 从子进程捕获stdout。...如果run()函数被调用时指定stderr=subprocess.STDOUT,那么stdoutstderr将会被整合到这一个属性,且stderr将会为Nonestderr: 从子进程捕获stderr

31140

python的subprocess模块

check: 如果check参数的值是True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdoutstderr...类实例的stdoutstderr属性或捕获相应的内容; ​ call()check_call()函数返回的是命令执行的状态码,而不是CompletedProcess类实例,所以对于它们而言,stdout...stderr不适合赋值为subprocess.PIPE; ​ check_output()函数默认就会返回命令执行结果,所以不用设置stdout的值,如果我们希望在结果捕获错误信息,可以执行stderr...如果run()函数被调用时指定 ​ ​stderr=subprocess.STDOUT,那么stdoutstderr将会被整合到这一个属性,且stderr将会为None stderr: 从子进程捕获的...通过为stdin, stdoutstderr传递不同的参数。 subprocess.Popen(): 在一些复杂场景,我们需要将一个进程的执行输出作为另一个进程的输入。

3K20

《Linux命令行与shell脚本编程大全》第十六章 控制脚本

注意:后台进程运行时,任然会使用终端显示器来显示STDOUTSTDERR消息。 所以可以将后台运行的程序的STDOUTSTDERR进行重定向。...16.2.2 运行多个后台作业 同时启动多个后台作业就可以了。 在终端会话中使用后台进程要注意,ps命令的输出,每一个后台进程都终端会话(pts/0)终端联系在一起。...这样终端退出时脚本也不会退出。 命令格式: $nohup ./test & nohup会自动将STDOUTSTDERR的消息重定向到一个名为nohup.out的文件。...2.获取作业的输出 显示器不会关联到该作业,取而代之的是linux将提交该作业的用户的电子邮件地址作为STDOUTSTDERR。任何标准输出标准错误都会通过邮件发送给用户。...如果没有关联电子邮件就无法获得输出,所以最好在脚本STDERRSTDOUT进行重定向 at的-M选项用来屏蔽作业产生的输出信息。 例子:就是重定向的例子。这里不写了。 3.

3K61

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

也可以通过使用stderr=subprocess.STDOUT在结果捕获标准错误。...stdin, stdoutstderr分别指明了被执行程序的标准输入,标准输出标准错误处理文件句柄。可选值PIPE,DEVNULL,已存在文件描述符(一个正整数),已存在文件对象,None。...\"被当作是字面字符 ",即转义字符 除非\后面跟了双引号,\",否则还是被解释为字面字符 \ \\被解释为\,\\\"则被解释为一个 \一个 " 字符 shell参数用于指明是否使用...stdin, stdout stderr 分别指定被执行程序的标准输入,标准输出,标准错误文件句柄。...如果进程在timeout(单位 秒)之后依然没终止,则抛出TimeoutExpired 异常,(Python3.3.2发丝。捕获该异常并重试comunicate,不会丢失任何输出。

3.8K20

python模块—command and

、sys.stderr   stdin、stdoutstderr 变量包含与标准I/O流对应的流对象。...如果需要更好地控制输出,而print 不能满足的要求,也可以替换它们,重定向输出输入到其它设备( device ),或者以非标准的方式处理它们 例子1:sys.stdout与print import...= f_hander print("hello") 结果: 本地生成一个out.log文件,内容为hello 3)捕获sys.exit(n)调用   执行到主程序末尾,解释器自动退出,但如需中途退出程序...,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示可以在主程序捕获对sys.exit的调用。...(0是正常退出,其他为异常) 例子 import sys def exitfunc(): print "hello world" sys.exitfunc = exitfunc   # 设置捕获时调用的函数

47220

Python subprocess与命令行交互

需要用 adb shell xxx 安卓设备交互。 虽然可以使用 subprocess.run在一个线程启动一个子进程,并在另一个线程与其交互。...获得所有输出时完成 第一个最简单的用例是启动一个 HTTP 服务器,与它交互,干净利落地终止它,并在完成后获取所有服务器的 stdout stderr。...然后,proc.communicate等待子进程退出捕获所有的标准输出。 Communicate 有一个非常方便的超时参数,让知道子进程是否由于某种原因没有退出。...因此,在看来,不建议在小于一行的块读取 stdout。 真的,千万别这么做。...注意,也可以在这里使用communicate,而不是等待来捕获 stderr 输出。 使用非阻塞读线程可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

7.2K22

何在Node.js编写运行您的第一个程序

的console对象提供了简单的方法来写入stdoutstderr或任何其他Node.js流,在大多数情况下是命令行。...log方法打印到stdout流,因此您可以在控制台中看到它。 在Node.js的上下文中, 流是可以接收数据的对象,stdout流,或者可以输出数据的对象,网络套接字或文件。...对于stdoutstderr流,发送给它们的任何数据都将显示在控制台中。 关于流的一个好处是它们很容易被重定向,例如,可以将程序的输出重定向到一个文件。...在args数组上使用forEach ,为它提供一个回调函数,用于在环境打印当前参数的值。 保存并退出该文件。...当您通过命令行运行此程序时,您将不会注意到stdoutstderr流之间的区别,但最好通过stderr流打印错误,以便更容易识别处理其他程序, 可以分辨出来。

8.3K30

22. Python 模块2

,sys.stdout或者文件,默认输出到sys.stderr,当streamfilename同时指定时,stream被忽略 logging.getLogger(__name__): 创建一个日志对象...,python的sys模块默认是把第一个参数默认是程序本省,从第二个参数起都是代码后面跟着的参数,通过sys.arg[n]就可以获得传入到程序的参数。...(2)sys.stdin \ stdout \ stderr 功能:stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象。...也可以替换它们, 这时候就可以重定向输出输入到其它设备( device ), 或者以非标准的方式处理它们 (2.1) sys.stdout 与 print 当我们在 Python 打印对象调用...,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示可以在主程序捕获对sys.exit的调用。

53430

python的subprocess

python2.7 源码的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出错误的管道,并获取他们的返回代码。...这个模块计划替代一些旧代码: os.system、os.spawn*、os.Popen、popen2.* 、commands.* 关于subprocess模块可以用来取代这些模块功能在下面可以找到...stdin、stdoutstderr分别指定执行程序的标准输入,标准输出标准错误。有效值是PIPE,现有的文件描述符(正整数),现有文件对象,None。PIPE创建一个新的子管道。...CalledProcessError的对象将有返回代码在returncode属性输出在output属性     这些参数相对于Popen构造函数是相同的。    ...=STDOUT, close_fds=True) (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) 在 Unix系统,

1.6K30

Python 守护进程

许多系统服务由守护程序实施;网络服务,打印等。  下面是转自一位网友写的编写守护进程的步骤: 1....调用fork()以便父进程可以退出,这样就将控制权归还给运行程序的     命令行或shell程序。...如果认为有可能有打开的文件描     述符,需要关闭它们,因为系统有一个同时打开文件数的限制。 7. 为标准输入,标准输出标准错误输出建立新的文件描述符。...,可     以将‘/dev/console’作为标准错误输出/或标准输出打开,而‘/dev/null’作     为标准输入,或者任何其它对的守护程序有意义的结合方法。...os.dup2(se.fileno(), sys.stderr.fileno()) 仔细比对前面说的步骤代码,大体上是没有什么问题了,但是疑问就来了,os.fork()到底是怎么工作的呢,GOOGLE

90330

Node.js进阶之进程与线程

同一块代码,可以根据系统CPU核心数启动多个进程,每个进程都有属于自己的独立运行空间,进程之间是不相互影响的。同一进程的多条线程将共享该进程的全部系统资源,虚拟地址空间,文件描述符信号处理等。...Web业务开发,如果有高并发应用场景那么 Node.js 会是不错的选择。 在单核 CPU 系统之上我们采用 单进程+单线程 的模式来开发。...Node.js Nginx 均采用事件驱动方式,避免了多线程的线程创建、线程上下文切换的开销。如果的业务大多是基于 I/O 操作,那么可以选择 Node.js 来开发。..., stderr) => { console.log({ error, stdout, stderr }) // { error: null, stdout: 'v8.5.0\n', stderr..., stderr) => { console.log({ error, stdout, stderr }) // { error: null, stdout: 'v8.5.0\n', stderr

1.1K21
领券