R中使用system()执行curl时如何隐藏输出?invisible()无效
解决R中
system()调用curl时无法隐藏输出的问题 这个问题我之前也碰到过!invisible()之所以没用,是因为它负责的是隐藏R对象的打印输出,而你用system()调用外部curl命令时,输出是来自cmd控制台的外部程序输出,完全不在invisible()的管辖范围内。下面给你几个实用的解决办法:
方法1:用system()的intern参数捕获输出
通过设置intern = TRUE,可以把外部命令的输出捕获为R的字符向量,这样控制台就不会显示任何内容了。如果不需要后续使用输出内容,直接用invisible()包裹或者连变量都不用赋值:
url <- "www.google.com" command <- paste0('curl "', url, '" -H "Pragma: no-cache" -H "Accept-Encoding: gzip, deflate, br"') # 捕获输出但不显示,也不保存结果 invisible(system(command, intern = TRUE)) # 如果需要后续处理输出,可以赋值给变量 # captured_output <- system(command, intern = TRUE)
方法2:给curl命令加输出重定向(Windows系统)
在Windows的cmd环境中,把输出重定向到NUL设备就能彻底隐藏。如果还要隐藏错误信息,加上2>&1把标准错误也重定向到空设备:
url <- "www.google.com" # 末尾加上 > NUL 2>&1 隐藏所有输出 command <- paste0('curl "', url, '" -H "Pragma: no-cache" -H "Accept-Encoding: gzip, deflate, br" > NUL 2>&1') system(command)
方法3:用system2()函数更优雅地控制输出
system2()是system()的升级版,支持单独指定命令和参数,还能通过stdout和stderr参数直接控制输出去向,设置为NULL就会丢弃输出:
url <- "www.google.com" curl_args <- c( url, "-H", "Pragma: no-cache", "-H", "Accept-Encoding: gzip, deflate, br" ) # 丢弃标准输出和错误输出 system2("curl", args = curl_args, stdout = NULL, stderr = NULL)
三种方法各有优势:
- 方法1适合需要后续处理curl输出的场景;
- 方法2是最直接的系统级隐藏,代码改动最小;
- 方法3更规范,避免字符串拼接参数的潜在问题,可读性更高。
内容的提问来源于stack exchange,提问作者GonzaloXavier
相关产品推荐
相关产品推荐

