python - Python:从stdin读取和写入Powershell中的二进制文件

标签 python python-3.x powershell stdout stdin

我有以下两个用Python编写的程序

# cat.py
import sys

filename = sys.argv[1]

with open(filename, "rb") as f:
    while c := f.read(1024 * 1024):
        sys.stdout.buffer.write(c)
该程序读取文件并将其作为二进制输出到stdout。
以下程序旨在读取数据并将其打印为字节。
import sys
import io
if __name__ == '__main__':
    print(sys.stdin.buffer.read(io.DEFAULT_BUFFER_SIZE))
但是在这种情况下我没有得到文件内容。如果我在Linux下运行此程序,则可以获取确切的内容,但是如果在Windows中运行,则不会:
python cat.py .\inputs\input.bin | python main.py
Windows上的输出(在pwsh.exe下运行):
0x3
0xc2
0xb7
0x55
0x12
0x20
0x66
0x67
0x50
0xc3
0x9e
0xc2
0xbd
0xd
0xa
在Linux上的输出(正确):
0x3
0xfa
0x55
0x12
0x20
0x66
0x67
0x50
0xe8
0xab
有什么想法可能是这种情况吗?是换行符结尾还是类似的东西?
另外,在cat.py中,如果我写入文件而不是stdout,我确实将正确的内容写入了文件。

更新:
好的,我将其范围缩小到一个PowerShell问题。如果我在cmd.exe中运行此程序,则不会有任何问题,但是,如果我在powershell下运行它,则可以。

最佳答案

可能为两个命令行设置了不同的编码,这可能导致不同的数据流。
不幸的是,即使您从stdin读取二进制文件,它也必须通过命令行,并且通常会有影响它的系统范围的编码设置。
有一个answer应该有助于解决此问题。

关于python - Python:从stdin读取和写入Powershell中的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065676/

相关文章:

python-3.x - Django channel 错误 "took too long to shut down and was killed."

python-3.x - Locust - 如何为同一用户定义多个任务集?

python - 使用带有多个分隔符的 numpy 数组导入

powershell - 合并多行文本以形成 CSV 文件的每一行

excel - Powershell 的 .csv 文件输出显示在 Excel 的一列中

powershell - 列出 cosmos 数据库的连接字符串不会返回结果,但列出键可以工作

python - 当按下按钮时,什么也没有发生。甚至没有错误消息

python - 获取数据存储实体的父键

python - 用于提取节号和说明的正则表达式

python - 如果条目匹配,则减少列表列表