首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python线连续结果为DeprecationWarning

Python线连续结果为DeprecationWarning
EN

Stack Overflow用户
提问于 2018-07-26 04:04:05
回答 1查看 286关注 0票数 0

在Python 3.6.5中,这可以很好地工作:

command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg".format(file_path, output_path)

这显然是一行很长的行,所以我使用了行续行符:

command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg"\
    .format(file_path, output_path)

但是,在启动时,这会生成一个DeprecationWarning

 DeprecationWarning: invalid escape sequence \,
  command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg"\

然而,这不会:

command = "foo {0} bar {1}"\
    .format(file_path, output_path)

我在项目的其余部分都使用了行延续;没有一个会导致DeprecationWarning。像this one这样的其他问题都提到了这个警告,但我能找到的连续字符都没有。

是什么导致了这个警告,为什么它只出现在这种非常小的情况下?

编辑:这与行续行无关。出现这个错误的原因只是在某些时候与Django的runserver有关。第一次运行runserver时,未报告错误。但是,如果更改导致重新加载,则在重新加载程序运行时会报告错误。

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 04:16:57

尝试使用命令列表:

command = [
    "ffmpeg",
    "-i", file_path,
    "-vsync", "0", 
    "-q:v", "2",
    "-vf", 'select="eq(pict_type,PICT_TYPE_I)"',
    "-r", "30", 
    os.path.join(output_path, "frame%03d.jpg"),
]

然后调用它,而不使用shell=True

subprocess.run(command)

通过这样做,您可以获得多个优势:

  1. 你是自由引用和逃脱地狱-你不需要添加引号或转义任何东西。空格不再是分隔符,参数将按列表中的方式传递。
  2. 您不必使用字符串插值(.format),因为只需将参数单独传递到列表即可。
  3. 通过不使用shell,您可以避免执行一个额外的无用进程-当您可以直接运行命令时,为什么还要执行shell来运行命令?
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51526849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档