asyncio调用在cmd中工作但在python

时间:2017-08-15 21:41:59

标签: python-3.x subprocess python-asyncio sox

我正在使用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的数据)。

任何人都可以帮我理解为什么吗?

1 个答案:

答案 0 :(得分:1)

由于某种原因,第二个命令通过sterr返回其结果。我将附加参数添加到asyncio.create_subprocess_exec函数以将sterr连接到asyncio.subprocess.PIPE。

cat -v filename.txt