python - 为什么 python 子进程中的“dd”不向 STDOUT 写入任何字节?
问题描述
我想将“dd”命令的输出重定向到我的 python 脚本中的标准输出。这是我的代码:
def dd2pipe():
chunk=654321
skip_ntimes= 2
read_ntimes= 3
filepath='39476a90-a5f1-cd59-7a8d-34c016276514.high.mp3'
p1_cmds = [f'dd bs={chunk}',
f'skip={skip_ntimes}',
f'count={read_ntimes}',
f'if={filepath}']
p1 = sp.Popen(p1_cmds,shell=True, stdout=sp.PIPE, stderr=sp.STDOUT)
byte_data= p1.stdout.read()
p1.stdout.close()
p1.wait()
print(byte_data)
dd2pipe()
我得到的输出是:
b'0+0 records in\n0+0 records out\n0 bytes copied, 2,338e-05 s, 0,0 kB/s\n'
你能帮我在 STDOUT 中读取 dd 命令的字节吗?
解决方案
感谢 Ry-s 的回答,它有效。我将 shell 更改为 False 并将 p1_cmds 更改为:
p1_cmds = ['dd',
f'bs={chunk}',
f'skip={skip_ntimes}',
f'count={read_ntimes}',
f'if={filepath}']
p1 = sp.Popen(p1_cmds,shell=False, stdout=sp.PIPE, stderr=sp.STDOUT)
推荐阅读
- django - 我是 Celery 和 Django 的新手,如何将 celery 响应的所有结果存储在一个文本文件中
- java - 及时测量数量[Java,多线程]
- android - Android剪贴板管理器未设置主剪辑
- xamarin.forms - iOS 是否有等效的 PeriodicWorkRequest 在后台使用?
- android - 带有 BottomNavigationView 的 ViewPager
- python - 如何在 Python 的 for 循环中分配变量
- python-3.x - 使用 xgboost/预测单个数据点将 id/index 与预测匹配
- python - 从 .txt 文件打印请求的数据
- outlook - 使用 Outlook 配置 Roundcube 时出现 CORB 问题
- r - 取数据框中三行的平均值并在忽略缺失值的情况下找到平均值