用IronPython将二进制数据写入stdout

2024-04-19 06:17:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个Python脚本,它们是在.net2.0上的ironpython2.6的Windows上运行的。一个输出二进制数据,另一个处理数据。我希望能够使用管道将数据从第一个流到第二个。我在这里遇到的问题是,当从Windows命令行运行时,sys.stdout使用CP437字符编码和文本模式而不是二进制模式('w'而不是'wb')。这会导致某些大于127的字节被写入错误的字符(即,不同的字节值在输出中产生相同的字符,因此读取它们的脚本无法区分)。在

例如,此脚本将同一字符(下划线)打印两次:

import sys
sys.stdout.write(chr(95))
sys.stdout.write(chr(222))

所以当我试着读数据的时候,我得到的东西和我最初写的不一样。在

我编写此脚本是为了检查问题是以'w'模式编写的还是编码:

^{pr2}$

运行之后,文件cp437_w包含字符95,其他三个分别包含字符222。因此,我认为这个问题是由CP437编码和以'w'模式编写的组合造成的。在这种情况下,如果我可以强制stdout使用二进制模式,那么这个问题就可以解决了(我假设让它使用ASCII编码是不可能的,因为命令行.exe使用CP437)。这就是我被困的地方;我找不到任何方法来做这件事。在

我发现一些可能的解决方案并不奏效:

  • 运行ipy -u似乎没有任何效果(我还测试了它是否会导致打印Unix风格的换行符;它没有,所以我怀疑-u根本不适用于IronPython)
  • 我不能使用this solution,因为IronPython不支持msvcrt
  • 使用python3.x,您可以访问无缓冲的stdout到{};这在2.6中不可用
  • os.fdopen(sys.stdout.fileno(), 'wb', 0)只在'w'模式下返回stdout

是的,有什么想法吗?另外,如果有更好的方法来流化二进制数据而不使用stdout,我当然愿意接受建议。在


Tags: 数据命令行脚本编码字节windowsstdoutsys
1条回答
网友
1楼 · 发布于 2024-04-19 06:17:32

sys.stdout只是一个变量,它指向与sys.__stdout__相同的东西

因此,只需在二进制模式下打开一个文件,将该文件分配给系统标准输出用它。如果你再需要一个真实的,正常的标准输出,你可以用它

sys.stdout = sys.__stdout__

相关问题 更多 >