Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python参数转换?_Python - Fatal编程技术网

Python参数转换?

Python参数转换?,python,Python,我有来自ffmpegsamples的以下代码,它工作正常并将查询的输出返回到输出中: def get_trim(input): def _logged_popen(cmd_line, *args, **kwargs): return subprocess.Popen(cmd_line, *args, **kwargs) p = _logged_popen( (ffmpeg .input(input)

我有来自
ffmpeg
samples的以下代码,它工作正常并将查询的输出返回到输出中:

def get_trim(input):

    def _logged_popen(cmd_line, *args, **kwargs):
        return subprocess.Popen(cmd_line, *args, **kwargs)

    p = _logged_popen(
        (ffmpeg
            .input(input)
            .filter('silencedetect',  noise='0.001')
            .output('-', format='null')
            .compile()
        ),
        stderr=subprocess.PIPE
    )
    output = p.communicate()[1].decode('utf-8')
然而,我想把它重构成适合我自己需要和风格的东西。我想删除
\u logged\u popen

当我尝试用以下方法执行此操作时:

def get_trim(input):

    cmd = ffmpeg.input(input).filter('silencedetect',  noise='0.001').output('-', format='null').compile()
    p = subprocess.Popen(cmd, stderr=subprocess.PIPE)
这根本不起作用。因此,我检查了
cmd
的内容,它生成了以下数组:

['ffmpeg', '-i',  <built-in function input>, '-filter_complex', '[0]silencedetect=noise=0.001[s0]', '-map', '[s0]', '-f', 'null', '-']
['ffmpeg'、'-i'、'-filter_complex'、'[0]silenedetect=noise=0.001[s0]'、'-map'、'[s0]'、'-f'、'null'、'-']
当通过第一个代码路径时,代码将按预期执行,但在第二个代码路径中,它如何与参数中的数组
cmd
一起执行

在第一个代码路径中满足
Popen
但在第二个代码路径中不满足的代码中发生了什么过程

部分解决


现在已知使用.input(input)存在问题,它在第一条路径中工作,但在第二条路径中不工作。不过问题还是一样

当然
.input(输入)
是错误的。你在传递一个函数。如果这是一个示例,则他们必须在其上方的某个位置为
input
分配了一个字符串,并且在您第二次尝试时该字符串不可用。subprocess方法接受一个字符串数组:
python>>subprocess.run([“ls”、“-l”、“/var/log/”],capture\u output=True)
当您运行
.communicate()
方法时,这会将数据发送到stdin。如果您没有捕获输出(stdout、stderr),那么它可能会显示为空。不确定这是否有帮助,请告诉我。@Carcigenicate“input”参数是输出中的文件名
,表示您正在传递函数
input
,所以这就是您的问题所在。所需的
输入
变量不在范围内;虽然没有,但我们不能说更多,我将很快重新编辑此内容-答案与原始列表中“input”的使用有关,但我没有明显的理由解释为什么这在一条路径中有效,而在另一条路径中无效,因为两条路径都在同一范围内,并且都有一个名为“input”的变量