【问题标题】:Python os.system timeout with stringsPython os.system 字符串超时
【发布时间】:2016-10-03 20:30:22
【问题描述】:

我无法执行以下行:

os.system("timeout 1s bash -c \"ffmpeg -i \""+path+\"+" | <some_<other_cmd>\"")

所以这个命令的目的是为整个命令设置一个超时时间,即从路径中流水线化一些 ffmpeg 信息。

问题是因为 bash -c "CMD" 是预期的,但该命令还包含" "

是否有另一种定义\"path\" 的方法,因为路径可以包含空格?或者其他可以解决我的问题的解决方案?

提前致谢!

【问题讨论】:

  • 你能提供stacktrace吗

标签: python linux bash


【解决方案1】:

三重单引号可以解决问题(这样您就不必转义双引号):

os.system('''timeout 1s bash -c "ffmpeg -i "+path+"+" | cat''')

但总的来说.. 为什么不使用语法更健全的subprocess.call

【讨论】:

  • 出现问题的原因是需要在路径周围加上引号,因为路径包含空格,而您的解决方案无法解决。而且我不熟悉python,我只是根据需要更改一些旧代码。但我会尝试以不同的方式解决问题,这样我就不需要将 2 个命令分组为超时。
【解决方案2】:

在其他帖子中回答过类似问题:12

可以使用subprocess相关函数,都支持timeout参数,替换os.system

subprocess.check_output

ffmpegCmd = "ffmpeg -I %s | %s" % (path, someOtherCmd)
outputBytes = subprocess.check_output(ffmpegCmd, shell=True, timeout=1)
outputStr = outputBytes.decode("utf-8") # change utf-8 to your console encoding if necessary

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 2018-12-08
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多