python - 子进程中单引号和双引号之间的区别[Python 3.4]

标签 python ffmpeg subprocess double-quotes single-quotes

我在 Windows Server 12 中使用 Python 3.4,并且我有一些 Python 代码可以执行下面的 ffmpeg 命令:
ffmpeg -i input.mp4 -vf select='not(mod(n\,30)),setpts=N/((30)*TB)' -c:v rawvideo -pix_fmt uyvy422 -y output.avi
我使用以下代码执行外部命令:

try:
    output = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as exc:
    print ("Command %s failed with error code" % command, exc.returncode, exc.output, file=sys.stderr)

当我传递用单引号括起来的命令时,它成功运行命令:
command = 'ffmpeg -i input.mp4 -vf select="not(mod(n\,30)),setpts=N/((30)*TB)" -c:v rawvideo -pix_fmt uyvy422 -y output.avi'
当我将命令作为用双引号括起来的字符串传递时,它会失败:
command = "ffmpeg -i input.mp4 -vf select='not(mod(n\,30)),setpts=N/((30)*TB)' -c:v rawvideo -pix_fmt uyvy422 -y output.avi"
错误消息如下:
[Eval @ 0000000eaf2fe040] Invalid chars ',setpts=N/((30)*TB)' at the end of expression 'not(mod(n,30)),setpts=N/((30)*TB)'  
[Parsed_select_0 @ 0000000eb0d27ca0] Error while parsing expression 'not(mod
(n,30)),setpts=N/((30)*TB)'  
[AVFilterGraph @ 0000000eb0d0a5a0] Error initializing filter 'select' with args 'not(mod(n\\,30)),setpts=N/((30)*TB)'  
Error opening filters!"

所以看起来,当使用双引号时,斜线 /这是 setpts=N/((30)*TB) 的一部分选项未正确解释,而使用双引号则没有问题。请注意,当我直接从命令提示符运行它们时,这两个命令(在选择选项中带有双引号或单引号)都可以正常工作。
但是,我看到很多人说从技术角度来看,单引号和双引号没有区别,例如
  • https://softwareengineering.stackexchange.com/questions/155176/single-quotes-vs-double-quotes
  • https://softwareengineering.stackexchange.com/questions/155176/single-quotes-vs-double-quotes

  • 斜杠解析是否取决于字符串周围的引号,或者这只是我正在运行的可执行文件特有的行为?

    最佳答案

    好问题,我在 Blender 中遇到了与 Python 3.5.0 相同的问题。
    当我写:

    addr_cal.append(addr + "calibration")
    sock_cal.connect(addr_cal[0])
    

    它不起作用(Errno 11,连接被拒绝),但有:
    addr_cal.append(addr + 'calibration')
    

    它工作完美。互联网上到处都有人说这只是风格问题,但显然不是。

    关于python - 子进程中单引号和双引号之间的区别[Python 3.4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146210/

    相关文章:

    python - 如何验证元素包含任何文本?

    python - 在python中将字符串转换为逗号之间的几个int

    python - Apache AutoIndex 和 Python PEP 503

    video - 使用 ffmpeg 分割流式视频

    python - 使用子进程将stderr和stdout从ffmpeg重定向到Python中的文件

    python - 如何从 subprocess.Popen.stdout 读取所有可用数据(非阻塞)?

    Python:Beautifulsoup 为 tis-620、字符集 windows-874 返回错误的解码

    react-native - 使用ffmpeg进行 native react 的视频压缩

    ffmpeg - 从视频中提取音频幅度

    python - 子进程,在 Python 的替代版本中启动脚本