记录从 curl 到文本文件的数据流



我正在尝试记录一些从命令流入的数据:

curl https://api.particle.io/v1/devices/events?access_token=blahblahtoken

该curl命令将侦听粒子的云,并将我在粒子设备之间发送或接收的任何消息打印到终端。我想将输出保存到文本文件。

我试过:

  • 卷曲网址>输出.txt
  • curl url>>输出.txt
  • curl url -o 输出.txt

在Mac或Linux上没有任何工作。文件被创建(或截断,如果适用(,但不会将任何内容写入文件,即使重复的终端窗口正在打印 curl 命令的输出。

我唯一的猜测是 curl 命令无限期地继续,直到我按 ctrl+C 退出它,也许以这种方式退出会阻止输出被记录到文件中?如何在数据进入时将输出记录到文件中?

我已经使用 cURL 大约十年了,我不知道有什么方法可以让它从命令行流式传输数据。您可以在 C API 中使用CURLOPT_WRITEFUNCTION,但我怀疑您是否想编写自己的 C 模块。我扫描了手册页,在 CLI 中找不到任何可用的类似选项。我不认为 cURL 命令行提供了执行所需操作的选项。正如您所怀疑的那样,它会等到收到整个页面后再输出(这在压缩页面时通常是必需的(。

从 https://curl.haxx.se/docs/manpage.html...

-N, --无缓冲区

禁用输出流的缓冲。在正常工作情况下,curl 将使用标准的缓冲输出流,这将具有以块的形式输出数据的效果,不一定是在数据到达时准确无误的。使用此选项将禁用该缓冲。

使用此选项在数据到达时处理数据,因此我不必等到请求完成。

我遇到了这个问题,也希望从curl记录粒子事件流。由于 curl 无法做到这一点,我编写了一个快速节点脚本来执行我需要的操作。把它放在这里,以防它对其他人有帮助。请注意,"EventListener"需要匹配粒子发出的事件字符串(在本例中为"currentTime"(:

#!/usr/bin/env node
var EventSource = require('eventsource');
var fs = require('fs');
var URL = 'https://api.particle.io/v1/products/power-monitor-v001/events?access_token=XXXXXXXX';
var es = new EventSource(URL);
es.addEventListener('currentTime', function (e) {
  console.log(e.data)
  fs.appendFileSync('test.json', e.data);
})

最新更新