小编use*_*678的帖子

如何防止C共享库在python中的stdout上打印?

我使用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)

python ctypes python-2.x

41
推荐指数
3
解决办法
1万
查看次数

如何使用netcat/socat/telnet手动连接到websocket?

我试图"手动" 连接到参考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浏览器中工作).

bash terminal socat websocket

19
推荐指数
2
解决办法
2万
查看次数

不要打印kafka-console-consumer警告

我正在尝试将加密的消息调试到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)

有没有办法在一个文件中得到一个单一的消息,并且嵌入该文件中的警告?

suppress-warnings apache-kafka kafka-consumer-api

4
推荐指数
1
解决办法
5225
查看次数

为什么我的滚动 adler32 校验和在 go 中不起作用?(模算术)

我正在 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)

checksum go modulo adler32

2
推荐指数
1
解决办法
629
查看次数