我一直在尝试重现发布者和订阅者示例:https://code.kx.com/wiki/Cookbook/publishsubscribe
只要它是纯Q相关的,一切都运行得很好。
我一直在尝试使用PyQ内核在jupyter笔记本中重现订阅者。我没有成功地在python对象中获取订阅者输出/提要。每次,订阅服务器都会在内核输出(控制台)中打印。
我还试图在PyQ中复制一些类似于我在Q的java客户端上看到的东西(https://code.kx.com/q/interfaces/java-client-for-q/),但没有太大成功。
我理想情况下想要实现的是:
有没有人有一些关于如何在python方面做到这一点的建议?有什么例子吗?
非常感谢,Yael
发布于 2018-07-13 08:20:45
为了将Q输出重定向到Jupyter notebook,您应该为%%q单元魔术指定-1 (对于stdout)和-2 (对于stderr)选项。
我想把它放在
对象中
您可以通过将标准流重定向到管道来捕获标准流。例如,在Linux上,您可以这样做
>>> import os
>>> r,w = os.pipe()
>>> q('\\2 /dev/fd/%d' % w)
k('::')
>>> q('-2 "hello"')
k('-2')
>>> os.read(r, 5)
b'hello'
请注意,我使用stderr进行说明,因为重定向stdout会干扰REPL显示,但同样的技术也适用于stdout。使用管道时通常需要注意的事项是适用的。管道具有有限的缓冲区,因此您需要安排定期读取。通常,这将涉及某种事件管理,这超出了本答案的范围。如果您不想处理这种复杂性,最好的办法是使用临时文件而不是管道。我还建议研究一下"fdcap“fixture是如何在pytest中实现的。
https://stackoverflow.com/questions/51290256
复制相似问题