[英]Capturing output from a shell command without [also] sending its output to stdout
我正在編寫一個Perl程序來獲取特定文件的修改時間。 我嘗試了以下方案:
$time = system("stat -c %y temp.txt")
->將$ time設置為“ 0”,並將“ 2013-04-03 06:10:02.000000000 -0600”寫入標准輸出。
$time = `stat -c %y temp.txt`
>這會將$ time設置為“ 2013-04-03 06:10:02.000000000 -0600”,並且還會顯示相同的內容(“ 2013-04-03 06: 10:02.000000000 -0600“)在標准輸出上。
$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.