我使用python lib导入一个在stdout上打印的C共享库.我想要一个干净的输出,以便与管道一起使用或重定向文件.打印是在python之外的共享库中完成的.
一开始,我的方法是:
# file: test.py
import os
from ctypes import *
from tempfile import mktemp
libc = CDLL("libc.so.6")
print # That's here on purpose, otherwise hello word is always printed
tempfile = open(mktemp(),'w')
savestdout = os.dup(1)
os.close(1)
if os.dup(tempfile.fileno()) != 1:
assert False, "couldn't redirect stdout - dup() error"
# let's pretend this is a call to my library
libc.printf("hello world\n")
os.close(1)
os.dup(savestdout)
os.close(savestdout)
Run Code Online (Sandbox Code Playgroud)
第一种方法是半工作:
- 由于某种原因,它在移动stdout之前需要一个"print"语句,否则总是打印hello word.因此,它将打印一个空行而不是库通常输出的所有模糊.
- 更令人讨厌,重定向到文件时失败:
$python test.py > foo && cat foo
hello world …Run Code Online (Sandbox Code Playgroud) 我试图"手动" 连接到参考websocket echo服务器,以了解协议如何工作(我正在使用socat).但是,服务器总是在不提供答案的情况下关闭连接.知道为什么吗?
这是我做的:
socat - TCP:echo.websocket.org:80
Run Code Online (Sandbox Code Playgroud)
然后,我在终端中粘贴以下文本:
GET /?encoding=text HTTP/1.1
Origin: http://www.websocket.org
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ==
Upgrade: websocket
Sec-WebSocket-Version: 13
Run Code Online (Sandbox Code Playgroud)
我在同一台机器上使用firefox中的开发人员工具嗅探了连接的参数,这样可以完美地运行:因此,我认为它们是正确的.但是,之后,服务器立即关闭连接,而不提供答案.为什么?如何"手动"实施协议?
我想在我的终端中键入test并让服务器回复我输入的内容(它在Web浏览器中工作).
我正在尝试将加密的消息调试到Kafka群集上.显然这些消息充满了不可打印的字符,并且在控制台上不可用,所以我想将输出保存在这样的文件中:
kafka-console-consumer \
--zookeeper 0.zookeeper.local,1.zookeeper.local \
--max-messages 1 \
--topic MYTOPIC > /tmp/message
Run Code Online (Sandbox Code Playgroud)
我无法解密生成的消息,因为输出包含密文以及警告消息,例如:
[2016-02-24 11:52:47,488] WARN Reconnect due to socket error: null (kafka.consumer.SimpleConsumer)
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个文件中得到一个单一的消息,并且不嵌入该文件中的警告?
我正在 go 中实现adler32 checksum的滚动版本。
这个答案有助于仔细检查我的数学。然而我很难在 golang 中正确实现它。
我写了以下代码:
func roll(adler, n, leave, enter uint32) uint32 {
a := adler & 0xffff
b := adler >> 16
a = (a + enter - leave) % MOD
b = (b - n*leave - 1 + a) % MOD
return b<<16 | a
}
Run Code Online (Sandbox Code Playgroud)
它在各种输入上进行了测试,并且运行良好,直到我决定在随机数据上运行它。这是一个不起作用的示例(我找到了其中几个)。
令我困惑的是,Python 中的相同代码在这些输入上完美运行:
def roll(adler, n, leave, enter):
a = adler & 0xffff
b = adler >> 16
a = (a + …Run Code Online (Sandbox Code Playgroud)