subprocess.Popen和传递参数(引用?)

时间:2018-05-05 17:02:19

标签: python subprocess

我一直试图使用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。更具体地说,我认为引用几乎总是麻烦的来源。

我如何更正代码?

我也尝试了多种变体,例如:

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'

也不起作用。

1 个答案:

答案 0 :(得分:1)

您是想在args行中使用Popen代替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'] 元素中的双引号;即,

metaflac

在将命令输入终端时,它们非常重要,因为它们让shell知道如何拆分参数,但是,在这里,您已经将参数拆分为字符串列表。 {{1}}可能能够处理它们,但可能不会。