捕获操作系统命令的输出
返回字符向量的函数
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+
转换为语法上有效的列名。