我想從我的Perl代碼中調用一個腳本,並將它的STDERR和STDOUT結合在一起。IPC :: System :: Simple可以捕獲STDERR嗎?
我通常使用capture
從IPC::System::Simple
,但ti似乎不允許捕獲STDERR。
我想從我的Perl代碼中調用一個腳本,並將它的STDERR和STDOUT結合在一起。IPC :: System :: Simple可以捕獲STDERR嗎?
我通常使用capture
從IPC::System::Simple
,但ti似乎不允許捕獲STDERR。
在POSIX系統上,您可以執行以下操作。在Windows上,這將工作在cygwin。
my @lines = capture("some command 2>&1");
但是,如果你要區分標準輸出線STDERR線,也許你需要使用IPC::Open3或誤命名IPC::Open3::Util。
您可以使用2>&1
將STDERR(文件描述符2)重定向到STDOUT(文件描述符1)。
從perlop在qx//
操作:
因爲反引號,如果你願意解決這個 不影響 標準錯誤,使用shell文件 描述符語法(假設殼 支持)。要一起捕獲命令的STDERR 和STDOUT:
$ output =`cmd 2> & 1`;
爲了澄清,這告訴shell將文件句柄2重定向到文件句柄1.由於文件句柄2是STDERR,文件句柄1是標準輸出,想。 – 2010-11-06 11:42:18
與使用Perl的先天設施相比,該模塊確實看起來很麻煩。 – tchrist 2010-11-06 13:40:42
[你如何在Perl中捕獲stderr,stdout和退出代碼?](http://stackoverflow.com/questions/109124/how-do-you-capture-stderr-stdout-和-out-code-all-in-once-in-perl) – Ether 2010-11-06 16:08:23