子流程.Popen和传递论点(引用?)

2024-04-28 13:11:02 发布

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

我一直试图用Popen运行一个进程,但没有成功。代码的部分是:

setCmd=['--set-tag="COMPOSER=J S Bach"', '--set-tag="ALBUM=Goldbergovske variace BWV 988"', '--set-tag="TRACKNUMBER=01"', '--set-tag="TITLE=Aria"']
pipe = subprocess.Popen(["metaflac"] + setCmd + [file],stdout=subprocess.PIPE)

似乎metaflac没有运行。简单的测试

pipe = subprocess.Popen(["metaflac"] + ["--version"],stdout=subprocess.PIPE)

很好地表明问题可能出在setCmd。更具体地说,我想引用as几乎总是麻烦的根源。你知道吗

如何更正代码?你知道吗

我还尝试了多种变体,如:

args=" ".join(setCmd)

然后预处理并附加args,这样我就可以像这样运行它:

pipe = subprocess.Popen(args,stdout=subprocess.PIPE)

在哪里

args='metaflac --set-tag="COMPOSER=J S Bach" --set-tag="ALBUM=Goldbergovske variace BWV 988" --set-tag="TRACKNUMBER=01" --set-tag="TITLE=Aria" filename.flac'

也不起作用。你知道吗


Tags: 代码albumtagstdoutargssubprocesspopencomposer
1条回答
网友
1楼 · 发布于 2024-04-28 13:11:02

你的意思是在Popen行中使用setCmd而不是args?你知道吗

pipe = subprocess.Popen(["metaflac"] + setCmd + [file],stdout=subprocess.PIPE)

此外,您可能需要删除setCmd元素中的双引号,即

setCmd=[' set-tag=COMPOSER=J S Bach',
        ' set-tag=ALBUM=Goldbergovske variace BWV 988',
        ' set-tag=TRACKNUMBER=01',
        ' set-tag=TITLE=Aria']

在终端中键入命令时,它们很重要,因为它们让shell知道如何拆分参数,但是,在这里,您已经将参数拆分为字符串列表。metaflac也许能对付他们,但也许不行。你知道吗

相关问题 更多 >