线程安全的stdio代理
项目描述
stdio_proxy
stdio_proxy是一个线程安全的库,用于Python 2.7和Python 3.5+,可以将stdio临时重定向到另一个对象。
背景
Python 3.5+中的contextlib
模块有redirect_stdout
和redirect_stderr
,分别是将sys.stdout
和sys.stderr
临时重定向到其他文件对象的有用函数。但是,这些函数对sys.stdout
和sys.stderr
有全局副作用。这意味着我们不能在大多数线程应用程序中使用这些函数。
- Python代码
import contextlib
import io
import time
from concurrent.futures import ThreadPoolExecutor
def run(value):
for i in range(2):
print("Hello from {}:{}".format(value, i))
time.sleep(1)
def run_hook(value):
buf = io.StringIO()
with contextlib.redirect_stdout(buf):
run(value)
return buf.getvalue()
with ThreadPoolExecutor() as executor:
f1 = executor.submit(run, "th1")
f2 = executor.submit(run_hook, "th2")
f1.result()
result = f2.result()
print("===Done===")
print("Redirected Stdout:\n{}".format(result))
- 我们想要的功能
Hello from th1:0
Hello from th1:1
===Done===
Redirected Stdout:
Hello from th2:0
Hello from th2:1
- 实际输出的示例
Hello from th1:0
===Done===
Redirected Stdout:
Hello from th2:0
Hello from th1:1
Hello from th2:1
这个库旨在在线程应用程序中正确重定向这些stdio。只需用以下代码替换run_hook
函数,结果将与“我们想要的功能”完全相同 :)。
def run_hook(value):
buf = io.BytesIO()
with stdio_proxy.redirect_stdout(buf):
run(value)
return buf.getvalue()
安装
$ pip install stdio-proxy
用法
- 将缓冲区重定向到
stdin
buf = io.BytesIO(b"foo\n")
with stdio_proxy.redirect_stdin(buf):
print("Read: {}".format(sys.stdin.readline()))
- 将
stdout
重定向到缓冲区
buf = io.BytesIO()
with stdio_proxy.redirect_stdout(buf):
print("foo")
print("Redirected: {}".format(buf.getvalue()))
- 将
stderr
重定向到缓冲区
buf = io.BytesIO()
with stdio_proxy.redirect_stderr(buf):
sys.stderr.write("foo\n")
print("Redirected: {}".format(buf.getvalue()))
许可
MIT许可
项目详情
下载文件
下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
此版本没有可用的源代码分发文件。有关生成分发存档的教程,请参阅此处。
构建分发
stdio_proxy-0.1.3-py3-none-any.whl (6.3 kB 查看哈希值)
stdio_proxy-0.1.3-py2-none-any.whl (6.3 kB 查看哈希值)
关闭
stdio_proxy-0.1.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ddbb8bf6e56e3ed7cafd71bf8a9facd9582e8392ad89f7898182f020edd5e365 |
|
MD5 | e4beacf33752f132c8a5e1fee8001fd9 |
|
BLAKE2b-256 | 5cf8b48162d4e996810e37504f925f14121d38eb0e1ae5eb230c4f39a448b86d |
关闭
stdio_proxy-0.1.3-py2-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9bf9cdaa4b68b0abf25eccf372de9e6497f91096390a5c53b219b394ffb1fbfd |
|
MD5 | 63f749ecc3c1e849ebe4a03abbcdb1db |
|
BLAKE2b-256 | 0942629491ff2ac35f4a1af3ea18c6444a020bcd63c85bdcd526d34d68b68238 |