簡體   English   中英

從shell命令捕獲輸出,而無需[也]將其輸出發送到stdout

[英]Capturing output from a shell command without [also] sending its output to stdout

我正在編寫一個Perl程序來獲取特定文件的修改時間。 我嘗試了以下方案:

  1. $time = system("stat -c %y temp.txt") ->將$ time設置為“ 0”,並將“ 2013-04-03 06:10:02.000000000 -0600”寫入標准輸出。

  2. $time = `stat -c %y temp.txt` >這會將$ time設置為“ 2013-04-03 06:10:02.000000000 -0600”,並且還會顯示相同的內容(“ 2013-04-03 06: 10:02.000000000 -0600“)在標准輸出上。

  3. $time = exec("stat -c %y temp.txt") ->這不會設置$ time,而是在stdout上顯示“ 2013-04-03 06:10:02.000000000 -0600”。

因為這一次又一次地用相同類型的數據淹沒我的標准輸出,所以我想擺脫它。 請問有人可以幫我嗎?

您最好使用perl的內置stat函數:

@st = stat('temp.txt');

$st[9]現在包含上次修改時間的Unix紀元時間戳。 您可以將其轉換為更有用的格式,例如

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($st[9]);

或只是得到這樣的可打印字符串

$time = localtime($st[9]);

反引號(以及相關的qx運算符或readpipe函數)不會在標准輸出上寫入任何輸出。 他們執行命令,捕獲命令的輸出並返回(通常將其分配給某個變量)。 所以

$time = `stat -c %y temp.txt`

將設置$time並且不向標准輸出寫入任何內容。 該命令可能會向標准錯誤中寫入內容,但是從您描述的症狀來看,這似乎並不是正在發生的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM