我正在使用sox来检索音频文件信息。有2个Windows cmd命令可以正确返回信息:
C:\Users\Me> "path\to\sox.exe" "--i" "path\to\audiofile.wav"
C:\Users\Me> "path\to\sox.exe" "path\to\audiofile.wav" "-n" "stat"
我正在使用asyncio脚本来运行这两个命令并收集数据以进行处理。我使用以下代码:
async def async_subprocess_command(*args):
# Create subprocess
process = await asyncio.create_subprocess_exec(
*args,
# stdout must a pipe to be accessible as process.stdout
stdout=asyncio.subprocess.PIPE)
# Wait for the subprocess to finish
stdout, stderr = await process.communicate()
# Return stdout
return stdout.decode().strip()
data1 = await async_subprocess_command(soxExecutable, "--i", audiofilepath)
data2 = await async_subprocess_command(soxExecutable, audiofilepath,"-n", "stat")
由于两个cmd命令都按预期运行,我很困惑python脚本中的data2始终为空。 Data1与预期一致(来自sox的数据)。
任何人都可以帮我理解为什么吗?
答案 0 :(得分:1)
由于某种原因,第二个命令通过sterr返回其结果。我将附加参数添加到asyncio.create_subprocess_exec函数以将sterr连接到asyncio.subprocess.PIPE。
cat -v filename.txt