我正在使用R' download.file(..., method="curl")
来下载各种文本文件。来自curl的状态更新没有" \ n"每次更新后,出现的内容如下所示,没有换行符:
> url1 <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
> q1f <- "wk3q1f.csv"
> download.file(url1,q1f,method="curl")
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 4147k 0 18404 0 0 14232 0 0:04:58 0:00:01 0:04:57 14233 2 4147k 2 114k 0 0 51344 0 0:01:22 0:00:02 0:01:20 51341
使用的版本:libcurl 7.30.0,R 3.1.0 for OS X。
我是否可以为换行符设置卷曲选项以生成进度报告:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 4147k 0 18404 0 0 14232 0 0:04:58 0:00:01 0:04:57 14233
2 4147k 2 114k 0 0 51344 0 0:01:22 0:00:02 0:01:20 51341
我看着curl-config并没有看到任何东西。
答案 0 :(得分:3)
我无法让curl
使用\n
代替我所知道的\r
。但是,您可以自己完成此操作。这是OS X的具体答案,但可以适用于Linux。使用homebrew执行brew install coreutils
,以便我们可以访问gstdbuf
,这将有助于我们获得无缓冲的命令输出。
接下来,用一行写一个小的shell脚本(我称之为mycurl
):
gstdbuf -i0 -o0 -e0 curl $1 -o $2 2>&1 | gstdbuf -i0 -o0 -e0 tr '\r' '\n'
确保它的可执行文件(chmod 755 mycurl
)
download.file
只需执行以下method="curl"
:
else if (method == "curl") {
if (quiet)
extra <- c(extra, "-s -S")
if (!cacheOK)
extra <- c(extra, "-H 'Pragma: no-cache'")
status <- system(paste("curl", paste(extra, collapse = " "),
shQuote(url), " -o", shQuote(path.expand(destfile))))
所以,我们可以用:
来模仿它status <- system(paste("/path/to/mycurl", shQuote(url1), shQuote(path.expand(q1f))))
这将通过换行符为您提供下载进度。
Linux用户可以使用stdbuf
vs gstdbuf
,因为coreutiles
homebrew
包会在g
之前添加命令。
或者,您可以使用GET
包中的httr
write_disk
选项,并使用更像R的进度表:
library(httr)
status <- GET(url1, write_disk(path.expand(q1f), overwrite=TRUE), progress("down"))
|==================================================== (etc. to 100%)|