【问题标题】:Using subprocess in python with multiple values and same argument在python中使用具有多个值和相同参数的子进程
【发布时间】:2016-07-30 20:17:41
【问题描述】:

这是我的命令

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”值。无论如何要让这个工作?

谢谢

【问题讨论】:

  • subprocess.call 不做任何过滤 - 它只是构造一个可以由 shell 执行的字符串。尝试在 shell 中正常运行命令,你会得到相同的结果。一旦你可以让它在 shell 中运行,请相应地修复你的subprocess.call。 (例如:阅读 MP4Box 的文档,看看它如何处理上述内容/它期望什么参数来做你想做的事情(或者即使它可以一次性完成))

标签: python subprocess xargs mp4box


【解决方案1】:
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"
])

来自docs

请注意,标签不能包含: 字符,因为这会破坏命令。

【讨论】:

  • 您有什么理由建议在这里使用字符串格式?使用参数列表是正确的方法,因为它会正确地转义参数,因此不会在 shell 中引起问题......想想一个带有空格的 outputdir 等等......
  • @JonClements 我没想到,我会改正的。
  • 很好...您也可以删除 dict 的 **{ 解包并使用 .format(name='a', artist='b') 等...但在功能上它是相同的...
  • @JonClements 谢谢你的建议,确实比较干净!
【解决方案2】:

根据他们的documentation,参数应该像这样传递

-itags tag1[:tag2]

所以你可以尝试这样做

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2013-06-19
    • 2017-08-18
    • 2023-03-05
    相关资源
    最近更新 更多