subprocess.PIPE保持为空

2024-04-29 02:01:36 发布

您现在位置:Python中文网/ 问答频道 /正文

经过广泛的研究,我提出了以下代码,从Python 3.7中调用音乐记谱软件MuseScore,以便在将MuseScore的转换输出保存到日志文件的同时转换文件:

import subprocess

with open('conversion.log', 'w') as out:
    proc = subprocess.run(['mscore','-o','out.mscx','in.xml'], encoding='utf-8', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    for line in proc.stdout.split('\n'):
        out.write(line)`

问题是:不管我做什么,日志文件都严格保持为空。但是,如果在终端中运行该命令,MuseScore会给出很多输出

以下是我也尝试过的:

同样的东西只放一个命令参数,这样它就可以在shell中运行:

proc = subprocess.run("mscore -o out.mscx in.mxl", encoding='utf-8', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

我尝试了capture_output这样的论点:

with open('conversion.log', 'wb', 0) as out:
    proc = subprocess.run(['mscore','-o','out.mscx','in.xml'], capture_output=True)
    out.write(proc.stdout) 

所有文件都是空的。知道为什么吗


Tags: 文件runinlogwithstdoutprocopen