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”的变量