You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的sink()捕获googledrive包的文件复制响应到文本文件?

解决googledrive输出无法被sink()捕获的问题

问题原因

googledrive包的控制台提示内容是通过cli库生成的特殊格式输出,这类输出不会被标准的sink()函数捕获——sink()仅能捕获R的标准输出(stdout)和标准错误流(stderr),而cli输出是直接发送到终端的独立内容。

解决方案

以下两种方法可以有效捕获并保存这些复制确认信息:

方法1:使用cli包的capture_cli()函数

该函数专门用于捕获cli生成的所有输出,步骤如下:

# 先安装cli包(首次使用时)
# install.packages("cli")
library(cli)
library(googledrive)

# 捕获复制操作的cli输出
log_content <- capture_cli({
  drive_cp(file = as_id(googledrive_file_id), path = as_id(googledrive_id), name = zipfile)
})

# 将捕获的内容写入日志文件
writeLines(log_content, "test_log.txt")

方法2:捕获dribble对象的打印输出

drive_cp()会返回一个dribble类型的对象,控制台的提示内容本质是该对象被打印时生成的。我们可以手动打印这个对象并捕获输出:

library(googledrive)

# 执行复制操作并保存结果对象
copy_result <- drive_cp(file = as_id(googledrive_file_id), path = as_id(googledrive_id), name = zipfile)

# 捕获打印结果时的输出
log_content <- capture.output(print(copy_result))

# 写入日志文件
writeLines(log_content, "test_log.txt")

注意事项

你的原代码中drive_cp()调用末尾多了一个多余的右括号,需要删除才能正常运行。

内容的提问来源于stack exchange,提问作者Heather

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:07:14