首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将16位参数/输入管道传输到python程序中?

如何将16位参数/输入管道传输到python程序中?
EN

Stack Overflow用户
提问于 2022-04-12 19:44:15
回答 1查看 27关注 0票数 1

我试图将sox的输出输送到python程序中,如下所示:

代码语言:javascript
复制
sox <audio file name>.flac --type raw --encoding signed-integer - | python3 <file name>.py | head

我对命令行非常陌生,但我知道我必须这样做。我只是不知道如何才能真正地访问我的程序中的数据。当您输入一个程序时,它是通过sys.stdin而不是sys.argv来实现的,所以我尝试做的是:

代码语言:javascript
复制
pcm = sys.stdin.buffer.read().decode('utf-16')

但这会引发错误:"UnicodeDecodeError:' UTF-16 -be‘编解码器无法解码位置8598-8599的字节:非法的UTF-16代理程序“。

我也尝试过open(sys.stdin, 'rb'),但这给了我一个类似于“预期的str或ospath类似的对象而不是'_io.TextIOWrapper‘对象的错误”

我希望能够阅读16位组的十六进制输入,但我真的迷路了。希望能在这里提供任何帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 20:59:58

这样做应该很好:

代码语言:javascript
复制
./Generate16BitData | ./Readstdin.py

这里的Python代码是:

代码语言:javascript
复制
#!/usr/bin/env python3

import sys
import numpy as np

# Read entire input stream
data = sys.stdin.buffer.read()
print(f'Read {len(data)} bytes')

# Convert into Numpy array of np.uint16
na = np.frombuffer(data, dtype=np.uint16)
print(f'Numpy array shape: {na.shape}, dtype: {na.dtype}')

它是这样运行的:

代码语言:javascript
复制
dd if=/dev/urandom bs=1024 count=10 | ./Readstdin.py
10+0 records in
10+0 records out
10240 bytes transferred in 0.000087 secs (117670337 bytes/sec)
Read 10240 bytes
Numpy array shape: (5120,), dtype: uint16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71848320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档