抑制R中的system()输出

时间:2018-04-23 18:02:18

标签: r

我想将invisible()函数行为应用到我在脚本中得到的输出system("cmd.exe", input = command)。但是,即使使用不可见,输出仍会显示在控制台中。有没有办法隐藏它?

编辑:我在命令中运行curl以下载网页,输出是预期的卷曲输出。

EDIT2:可重复的例子

url <- "www.google.com"
command <- paste0('curl "', 
                  url,
                  '"',
                  ' -H "Pragma: no-cache" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US,en;q=0.9" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Cache-Control: no-cache" -H "Cookie: uupid69991=eb4c8ec5-1f94-4cf5-957d-e477a778f79c; uupid99993=eb4c8ec5-1f94-4cf5-957d-e477a778f79c; uupid89991=1; uupid79991=Fee_Based_Role; locale=en; uupid99991=1903 x 1012; IVZSESSIONID=CEHrDvYqpDuQ-zwy8YZpWwm1RWZHY3DGq4V7elBfxcH87XFFo-J_^! -175310928; _ga=GA1.2.1974800928.1524362050; _gid=GA1.2.1544243785.1524362050" -H "Connection: keep-alive" --compressed',
                  ' > google.html')

invisible(system("cmd.exe", input = command))

控制台输出:

Microsoft Windows [Version 10.0.16299.371]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\gonza\OneDrive\Documents\etfcmfa>curl "www.google.com" -H "Pragma: no-cache" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US,en;q=0.9" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Cache-Control: no-cache" -H "Cookie: uupid69991=eb4c8ec5-1f94-4cf5-957d-e477a778f79c; uupid99993=eb4c8ec5-1f94-4cf5-957d-e477a778f79c; uupid89991=1; uupid79991=Fee_Based_Role; locale=en; uupid99991=1903 x 1012; IVZSESSIONID=CEHrDvYqpDuQ-zwy8YZpWwm1RWZHY3DGq4V7elBfxcH87XFFo-J_^! -175310928; _ga=GA1.2.1974800928.1524362050; _gid=GA1.2.1544243785.1524362050" -H "Connection: keep-alive" --compressed > google.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   231  100   231    0     0    982      0 --:--:-- --:--:-- --:--:--   982

3 个答案:

答案 0 :(得分:1)

您可以使用sink功能转移R中的输出。

> curl::curl('https://stackoverflow.com/')
A connection with                                        
description "https://stackoverflow.com/"
class       "curl"                      
mode        "r"                         
text        "text"                      
opened      "closed"                    
can read    "yes"                       
can write   "no"                        
> sink(file="nul") # set file = '/dev/null' if using Unix-based OS
> curl::curl('https://stackoverflow.com/') # no output

如果将file设置为其他内容,则会将输出打印到该文件而不是控制台。

答案 1 :(得分:1)

在系统调用中使用intern=TRUE。来自system帮助页面:

intern  
a logical (not NA) which indicates whether to capture the output of the command as an R character vector.

一旦你这样做,你可以使用隐形或只是存储结果,以防止它们被打印。

答案 2 :(得分:1)

将“ignore.stdout”或“ignore.stderr”属性(或两者)设置为 TRUE 可能会起作用(可能特定于 Unix 操作系统)。 “ignore.stdout”禁止写入“stdout”的消息,“ignore.stderr”禁止写入“stderr”的消息。

所以:

system(some_command, ignore.stdout = TRUE, ignore.stderr = TRUE)
相关问题