10
A
回答
11
如果有問題的代碼不使用STDOUT明確的(即,它只是print "..."
),你可以使用select
更改print
使用文件句柄:
my $output;
open(my $outputFH, '>', \$output) or die; # This shouldn't fail
my $oldFH = select $outputFH;
call_code_that_prints();
select $oldFH;
close $outputFH;
print $output; # Here's what we collected
使用select
使得它更容易恢復STDOUT之後。關閉並重新打開標準輸出很難撤銷。請注意,select
不會影響STDOUT本身,因此它不會影響外部進程,但是您說沒有任何。它也不會影響類似print STDOUT "..."
的代碼。
如果select
方法不足以滿足您的需求,我建議您嘗試Capture::Tiny。它可以捕獲外部程序和顯式寫入STDOUT的代碼的輸出。但它不能(當前)只捕獲STDOUT;它總是捕獲STDOUT和STDERR(分開或合併爲一個字符串)。
16
新的,很酷的方式來處理這個是Capture::Tiny。您可以通過手術來影響您需要的程序部分,而不會影響其他任何內容。但是,我可能會做什麼cjm recommends,因爲它不需要一個模塊。
相關問題
- 1. 在Perl eval中捕獲變量賦值
- 2. Perl錯誤捕獲變量
- 3. 如何在Perl中使用反引號在兩個不同的變量中捕獲STDOUT和STDERR
- 4. 如何從Perl腳本捕獲系統命令的stdin和stdout?
- 5. 如何從Perl打開管道捕獲STDOUT?
- 6. Swift如何在Swift中捕獲變量?
- 7. Perl可選?停止變量捕獲
- 8. 如何在Perl中一次性捕獲stderr,stdout和退出代碼?
- 9. 如何捕獲變量(C#)
- 10. 捕捉變量stdout和stderr重定向
- 11. 將包含文件的STDOUT捕獲到變量
- 12. Perl:如何將WMIC輸出捕獲到變量
- 13. 子進程沒有捕獲stdout的輸出存儲在Python中的變量內
- 14. 如何從另一個pts捕獲stdout?
- 15. 如何使用googletest捕獲stdout/stderr?
- 16. 如何在lambda函數中捕獲變量數量的參數
- 17. 在rails中實時捕獲stdout
- 18. 在Windows中從SAS捕獲stdout和stderr?
- 19. 在haskell中捕獲/劫持stdout
- 20. 以Perl中的變量正則表達式捕獲組
- 21. 多個綁定運算符中的Perl捕獲變量
- 22. open(STDOUT,'>:scalar',\ $ stdout)在Perl中如何工作?
- 23. 如何獲取存儲在perl中任何變量值的值
- 24. Perl腳本捕獲在反引號中執行的stderr和stdout命令
- 25. 如何在junit 5 gradle測試報告中捕獲stdout/stderr?
- 26. 如何在CodeIgniter中的Object數組中捕獲單個變量?
- 27. awk cmd從STDOUT捕獲行
- 28. 用NDK捕獲stdout/stderr
- 29. perl使用open3寫入STDIN並捕獲STDOUT和STDERR
- 30. Lambda變量捕獲
使用Capture :: Tiny的一個問題是,它無法僅捕獲STDOUT並將STDERR留下。它總是捕獲兩者,分別或合併。 – cjm 2010-08-18 17:16:04
呃,直到有人提交補丁。 [RT#60515](https://rt.cpan.org/Ticket/Display.html?id=60515):) – 2010-08-19 12:28:52
跟進... Capture :: Tiny已在上述評論後的某個時間更新。它可以抓取STDOUT,並通過'capture_stdout'使STDERR獨立。還有其他變體,取決於你想要做什麼。非常有用的模塊。 – 2011-12-30 02:58:22