相关疑难解决方法(0)

我可以将python中的stdout重定向到某种字符串缓冲区吗?

我正在使用python ftplib来编写一个小的FTP客户端,但是包中的一些函数不返回字符串输出,而是打印到stdout.我想重定向stdout到一个对象,我将能够从中读取输出.

我知道stdout可以重定向到任何常规文件:

stdout = open("file", "a")
Run Code Online (Sandbox Code Playgroud)

但我更喜欢不使用本地驱动器的方法.

我正在寻找类似于BufferedReaderJava的东西,可用于将缓冲区包装到流中.

python redirect stdout stream

127
推荐指数
7
解决办法
11万
查看次数

如何防止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万
查看次数

捕获dis.dis结果

有没有办法在dis.dis()没有重定向的情况下获得输出sys.stdout?我试过了:

out=str(dis.dis())
Run Code Online (Sandbox Code Playgroud)

out=""""""
out+=str(dis.dis())
Run Code Online (Sandbox Code Playgroud)

但是我很快发现它又回来了None.有没有什么办法解决这一问题?

python python-2.7

15
推荐指数
1
解决办法
1529
查看次数

标签 统计

python ×3

ctypes ×1

python-2.7 ×1

python-2.x ×1

redirect ×1

stdout ×1

stream ×1