捕獲作業系統命令的輸出
返回字元向量的函式
Base R
有兩個用於呼叫系統命令的函式。兩者都需要一個額外的引數來捕獲系統命令的輸出。
system("top -a -b -n 1", intern = TRUE)
system2("top", "-a -b -n 1", stdout = TRUE)
兩者都返回一個字元向量。
[1] "top - 08:52:03 up 70 days, 15:09, 0 users, load average: 0.00, 0.00, 0.00"
[2] "Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie"
[3] "Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 98.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st"
[4] "Mem: 12194312k total, 3613292k used, 8581020k free, 216940k buffers"
[5] "Swap: 12582908k total, 2334156k used, 10248752k free, 1682340k cached"
[6] ""
[7] " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND "
[8] "11300 root 20 0 1278m 375m 3696 S 0.0 3.2 124:40.92 trala "
[9] " 6093 user1 20 0 1817m 269m 1888 S 0.0 2.3 12:17.96 R "
[10] " 4949 user2 20 0 1917m 214m 1888 S 0.0 1.8 11:16.73 R "
例如,使用 UNIX 命令
top -a -b -n 1
。這是特定於作業系統的,可能需要進行修改才能在你的計算機上執行示例。
包 devtools
具有執行系統命令並捕獲輸出而無需額外引數的功能。它還返回一個字元向量。
devtools::system_output("top", "-a -b -n 1")
返回資料幀的函式
包 data.table
中的 fread
函式允許執行 shell 命令並讀取像 read.table
這樣的輸出。它返回 data.table
或 data.frame
。
fread("top -a -b -n 1", check.names = TRUE)
PID USER PR NI VIRT RES SHR S X.CPU X.MEM TIME. COMMAND
1: 11300 root 20 0 1278m 375m 3696 S 0 3.2 124:40.92 trala
2: 6093 user1 20 0 1817m 269m 1888 S 0 2.3 12:18.56 R
3: 4949 user2 20 0 1917m 214m 1888 S 0 1.8 11:17.33 R
4: 7922 user3 20 0 3094m 131m 1892 S 0 1.1 21:04.95 R
注意,fread
自動跳過了前 6 個標題行。
這裡新增了引數
check.names = TRUE
,將%CPU
,%MEN
和TIME+
轉換為語法上有效的列名。