如何从LFTP捕获输出? (输出没有写入STDOUT或STDERR?)

我想从lftp获得进度信息。 目前,我正在使用curl

curl http://example.com/file -o file -L 2> download.log 

这将curl的进度信息写入download.log文件,我可以通过它来获取实时进度。

但是同样的方法对于lftp不起作用,无论是使用stdout还是stderr。 最后我会得到一个空的download.log文件,直到传输完成。

 lftp -e 'get http://example.com/file;quit' 2> download.log lftp -e 'get http://example.com/file;quit' 1> download.log 

当我不redirect输出,我看到在屏幕上的进展。 当我redirect输出时,我停止看到屏幕上的进度,但没有在download.log中显示。 文件传输完成后,我看到最后的结果,像这样 – 但没有任何事情:

 97618627 bytes transferred in 104 seconds (913.1K/s) 

是lftp做一些不寻常的输出 – 打印到屏幕没有打印到标准输出/标准错误? 捕获屏幕输出比redirect标准输出/标准错误还有其他方法吗?

这听起来像是缓冲它的输出。 您可以尝试unbuffer expect脚本( 手册页 )。

检查xfer域variables:

设置xfer:log 1

每5秒设置xfer:eta-period 5#

设置xfer:rate-period 20#平均费率

会把日志传输信息放到〜/ .lftp / transfer_log中

不知道你可以改变日志文件的目的地

尝试捕获进度信息:lftp sftp:// $ SFTPUSER:$ SFTPPASS @ $ SFTPHOST -e“cd $ DIRECTORY; mget $ SFTPFILE; bye”> $ SFTPLOG 2>&1