在python中使用具有多个值和相同参数的子进程

在python中使用具有多个值和相同参数的子进程,python,subprocess,xargs,mp4box,Python,Subprocess,Xargs,Mp4box,这是我的命令 subprocess.call(["wine","MP4Box.exe","-add",outputdir+"tmp.m4a","-itags",'name=a',"-itags", "artist=b","-itags", "album_artist=c","-itags", "album=d","-itags", "created=2034","-itags", "genre=e","-new", "tmp23.m4a"]) 在输出文件中,我只能获得流派,子流程只发送最后一个

这是我的命令

subprocess.call(["wine","MP4Box.exe","-add",outputdir+"tmp.m4a","-itags",'name=a',"-itags", "artist=b","-itags", "album_artist=c","-itags", "album=d","-itags", "created=2034","-itags", "genre=e","-new", "tmp23.m4a"])
在输出文件中,我只能获得流派,子流程只发送最后一个“-itags”值。是否要使其工作

谢谢

根据他们的要求,参数应该这样传递

-itags tag1[:tag2]

所以你可以试着这样做

subprocess.call(["wine","MP4Box.exe","-add",outputdir+"tmp.m4a","-itags","name=a:artist=b" ...


请注意,标记不能包含
字符,因为这将中断命令。

子流程.call
不进行任何筛选-它只构造一个可由shell执行的字符串。尝试在shell中正常运行该命令,您将得到相同的结果。一旦可以在shell中运行它,请修复
子流程。相应地调用
。(例如:阅读MP4Box的文档,看看它如何处理上述内容/它希望做什么参数(或者即使它可以一次性完成)),你建议在这里使用字符串格式的原因是什么?使用参数列表是正确的方法,因为它将正确地转义参数,因此不会在shell中引起问题。。。想想一个outputdir,里面有空格等等。@JonClements我没有想到,我会纠正它。很好。。。您也可以删除dict的
**{
解包,只需使用
.format(name='a',artist='b')
等…但功能上是一样的…@JonClements谢谢您的建议,它确实更干净!
outputdir = "output"

subprocess.call([
    "wine", "MP4Box.exe", "-add", outputdir + "/tmp.m4a",
    "-itags", "name={name}:artist={artist}:album_artist={album_artist}:album={album}:created={created}:genre={genre}".format(
        name="a",
        artist="b",
        album_artist="c",
        album="d",
        created=2034,
        genre="e"
    ),
    "-new", "tmp23.m4a"
])