<i id='r1qkN'><tr id='r1qkN'><dt id='r1qkN'><q id='r1qkN'><span id='r1qkN'><b id='r1qkN'><form id='r1qkN'><ins id='r1qkN'></ins><ul id='r1qkN'></ul><sub id='r1qkN'></sub></form><legend id='r1qkN'></legend><bdo id='r1qkN'><pre id='r1qkN'><center id='r1qkN'></center></pre></bdo></b><th id='r1qkN'></th></span></q></dt></tr></i><div id='r1qkN'><tfoot id='r1qkN'></tfoot><dl id='r1qkN'><fieldset id='r1qkN'></fieldset></dl></div>

  • <tfoot id='r1qkN'></tfoot>

    <legend id='r1qkN'><style id='r1qkN'><dir id='r1qkN'><q id='r1qkN'></q></dir></style></legend>
      <bdo id='r1qkN'></bdo><ul id='r1qkN'></ul>
      1. <small id='r1qkN'></small><noframes id='r1qkN'>

      2. 如何正确传递子进程参数

        How to correctly pass subprocess arguments(如何正确传递子进程参数)

          • <small id='mcgid'></small><noframes id='mcgid'>

            <legend id='mcgid'><style id='mcgid'><dir id='mcgid'><q id='mcgid'></q></dir></style></legend>
            <i id='mcgid'><tr id='mcgid'><dt id='mcgid'><q id='mcgid'><span id='mcgid'><b id='mcgid'><form id='mcgid'><ins id='mcgid'></ins><ul id='mcgid'></ul><sub id='mcgid'></sub></form><legend id='mcgid'></legend><bdo id='mcgid'><pre id='mcgid'><center id='mcgid'></center></pre></bdo></b><th id='mcgid'></th></span></q></dt></tr></i><div id='mcgid'><tfoot id='mcgid'></tfoot><dl id='mcgid'><fieldset id='mcgid'></fieldset></dl></div>

              • <tfoot id='mcgid'></tfoot>
                  <tbody id='mcgid'></tbody>
                • <bdo id='mcgid'></bdo><ul id='mcgid'></ul>

                  本文介绍了如何正确传递子进程参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试自动连接MP4视频文件(格式正确)的文件夹。

                  (我的问题的这个编辑版本将问题减少到我的念力的最低级别。原标题询问了subprocess.callsubprocess.run之间的区别,但结果发现问题出在其他地方。)

                  为什么

                  subprocess.call('ffmpeg -hide_banner -loglevel error -i movie1.mp4 -i movie2.mp4 -i credits.mp4 
                  -filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]"  
                  -map "[outv]" -map "[outa]" "output.mp4"',shell=True)
                  

                  工作正常(其中s为输入字符串,count为输入数),但

                  #python3 
                  #makeFinalExample.py
                  
                  import subprocess
                  
                  s = '-i movie1.mp4 -i movie2.mp4 -i credits.mp4'
                  count = 3
                  print(f's prints out as: {s}')
                  
                  
                  commandList = ['ffmpeg',
                                  '-hide_banner',
                                  '-loglevel',
                                  'error',
                                  #str(s),
                                  '{0}'.format(s),
                                  '-filter_complex',
                                  "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n={0}:v=1:a=1[outv][outa]".format(count),
                                  '-map',
                                  "[outv]",
                                  '-map',
                                  "[outa]",
                                  "output.mp4"]
                  print(f'the command list prints out as {commandList}')
                  subprocess.run(commandList)
                  
                  

                  获取错误(字符串是以str(s)的形式传递,还是以显示的格式传递.

                  Unrecognized option 'i movie1.mp4 -i movie2.mp4 -i credits.mp4'.
                  Error splitting the argument list: Option not found
                  

                  这里是输入字符串的打印输出

                  -i movie1.mp4 -i movie2.mp4 -i credits.mp4
                  

                  这里是命令列表的打印输出

                  ['ffmpeg', '-hide_banner', '-loglevel', 'error', '-i movie1.mp4 -i movie2.mp4 -i credits.mp4', '-filter_complex', '[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=3:v=1:a=1[outv][outa]', '-map', '[outv]', '-map', '[outa]', 'output.mp4']
                  

                  推荐答案

                  这与subprocess.callvssubprocess.run无关,不同之处在于您在第一种情况下使用shell=True,而在第二种情况下不使用。这两个函数在这方面的行为完全相同,而且几乎所有其他方面都是如此(subprocess.run是一个较新的函数,它支持更多更多的选项,并返回更有用的对象,但在其最基本的形式中,它使用相同的API执行完全相同的工作)。

                  问题是您需要将字符串s拆分成标记,就像拆分所有其他命令行参数一样(错误消息实际上揭示了这一点,但我想您必须知道要查找什么才能捕获它)。当您省略shell=True时,每个选项都需要是单独的列表项,如

                  [ ..., '-i', 'movie1.mp4', '-i', 'movie2.mp4', '-i', 'credits.mp4', ...]
                  

                  函数shlex.split()可以帮助您正确地将命令拆分成令牌:

                  commandList = [
                      'ffmpeg',
                      '-hide_banner',
                      '-loglevel', 'error',
                      *shlex.split(s),
                      '-filter_complex',
                      "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n={0}:v=1:a=1[outv][outa]".format(count),
                      '-map', "[outv]",
                      '-map', "[outa]",
                      "output.mp4"]
                  

                  但是函数的一个更好的设计可能是允许用户只传入输入视频文件名的列表,然后从那里获取它。(那么我猜count也不需要显式指定;它只是len(inputfilenames)的值。)

                  这篇关于如何正确传递子进程参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
                  Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
                  Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
                  Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
                  Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)
                  Grouping pandas DataFrame by 10 minute intervals(按10分钟间隔对 pandas 数据帧进行分组)

                    1. <legend id='0a9JP'><style id='0a9JP'><dir id='0a9JP'><q id='0a9JP'></q></dir></style></legend>
                      <i id='0a9JP'><tr id='0a9JP'><dt id='0a9JP'><q id='0a9JP'><span id='0a9JP'><b id='0a9JP'><form id='0a9JP'><ins id='0a9JP'></ins><ul id='0a9JP'></ul><sub id='0a9JP'></sub></form><legend id='0a9JP'></legend><bdo id='0a9JP'><pre id='0a9JP'><center id='0a9JP'></center></pre></bdo></b><th id='0a9JP'></th></span></q></dt></tr></i><div id='0a9JP'><tfoot id='0a9JP'></tfoot><dl id='0a9JP'><fieldset id='0a9JP'></fieldset></dl></div>
                        <tbody id='0a9JP'></tbody>

                        • <bdo id='0a9JP'></bdo><ul id='0a9JP'></ul>
                          <tfoot id='0a9JP'></tfoot>
                          • <small id='0a9JP'></small><noframes id='0a9JP'>