如何将 websocket 推送 api 输出写入文本文件?

Posted

技术标签:

【中文标题】如何将 websocket 推送 api 输出写入文本文件?【英文标题】:How to write websocket push api output to text file? 【发布时间】:2018-01-03 06:12:48 【问题描述】:

我正在使用 python 脚本从加密货币交易所 Poloniex 的订单簿中获取实时更新。

目前它将websocket推送的信息打印到stdout,我需要做什么才能将它打印到文件中?我正在使用 python-2.7,在此先感谢!

下面是我正在使用的脚本:

#!/usr/bin/python
import sys, getopt
import websocket
import thread
import time
import json

try:
    opts, args = getopt.getopt(sys.argv[1:], 'p:', ['parity='])
except getopt.GetoptError:
    sys.exit(2)

for opt, arg in opts:
    if opt in ('-p', '--paridade'):
        parity = arg
    else:
        sys.exit(2)

data = 'command':'subscribe','channel':''+parity+''

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    print("ONOPEN")
    def run(*args):
        ws.send(json.dumps(data))
        while True:
            time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())


if __name__ == "__main__":

    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("wss://api2.poloniex.com/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

【问题讨论】:

这是否允许您同时订阅多对? 【参考方案1】:

python 内置了对文件操作的支持:https://docs.python.org/2/library/stdtypes.html#bltin-file-objects

你可以用print(message)代替:

file_path = '/example/file.txt' #choose your file path
with open(file_path, "w") as output_file:
    output_file.write(message + "\n")

请注意,+ "\n" 是为了让每条消息都将写入文件中的新行,因为 python 不会自行将其放在那里

【讨论】:

感谢您的帮助,我现在可以将输出重定向到文件。但是文件被截断了......所以只有 API 推送的最后一条消息被保存在文件中。 你可以用'a'打开它而不用'w'来追加而不是覆盖

以上是关于如何将 websocket 推送 api 输出写入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

技巧之如何快速使用websocket来监控标准输出

如何将 websocket 二进制消息作为流发送到 Google Speech API?

如何使用 Spring 和 Websocket 构建推送通知服务

推送 API 示例 [关闭]

在 Web 主机上使用 websocket 或 API(Ajax 推送引擎)技术

播放 WebSockets 服务器推送示例