我想本地方式來解決這個問題...Perl - 控制檯輸出?
我有一個perl命令,打一個電話,有時,直接打印出來的文本到控制檯。
我想是這樣的:
$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
print $text;
}
沒有辦法做到這一點?
我想本地方式來解決這個問題...Perl - 控制檯輸出?
我有一個perl命令,打一個電話,有時,直接打印出來的文本到控制檯。
我想是這樣的:
$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
print $text;
}
沒有辦法做到這一點?
use IO::CaptureOutput qw(capture qxx qxy);
# STDOUT and STDERR separately
capture { noisy_sub(@args) } \$stdout, \$stderr;
我假設這個Perl腳本正在調用外部可執行文件。如果輸出打印在stdout上,則可以使用反引號操作符或qx
來運行該命令並捕獲輸出。在Unix系統上,您可以使用system()
,並使用>
運算符將輸出重定向到/dev/null
。您也可以撥打open
使用以下命令:
如果文件名開頭「|」,文件名被解釋爲 命令,其輸出是用管道,如果文件名 結尾的「| ',文件名被解釋爲 管道輸出給我們的命令。有關這方面的更多示例,請參閱perlipc中的「使用open()for IPC」的 。 (您不允許「打開」 命令,該命令可以輸入和輸出,但可以在perlipc中查看IPC :: Open2, IPC :: Open3以及「與另一個 過程的雙向通信」)
最後,您可以關閉並重新打開STDOUT和STDERR文件句柄(編輯:IO::CaptureOutput
以下推薦)。雖然這有點奇怪,我不會推薦它作爲最好的選擇。
考慮改寫的問題。從你的問題描述中,我認爲你並不是真的想要抑制控制檯輸出,而是想要捕獲它。 – MetaEd
你真的應該說MagicCommandICan'tChange()是什麼樣的命令。 Perl的?系統? – TLP