【问题标题】:Python os.exec(): Termination on running 'notify-send'Python os.exec():运行“通知发送”时终止
【发布时间】:2012-11-22 13:57:20
【问题描述】:

我正在Linux下编写一个小Python脚本,弹出多个libnotify弹窗,目前使用如下语法:

import os
os.execv('/usr/bin/notify-send', ['App Title', 'Message'])

不幸的是,由于某种奇怪的原因,它直接将解释器杀死到命令提示符处。
它不会对脚本执行的任何其他命令执行此操作,只需 notify-send

没有给出错误,没有抛出已知异常,没有任何错误迹象,它只是在命令提示符下消失。

有没有人有同样容易做到的建议或替代方案?

【问题讨论】:

  • 为什么不使用 os.system()?
  • 因为那时我必须弄清楚如何管理所有适当的双引号和单引号,以及转义任何嵌入的引号。这样,参数已经很好地封装了。
  • 您可以将它们放入变量中并将它们连接起来,然后将其用作对 os.system() 的调用。
  • 这不是问题。如果我使用的字符串之一包含双引号怎么办?我将不得不以某种方式逃避它,可能使用两个反斜杠。不过,我宁愿不必这样做。这种方法意味着参数实际上是逐字传递的,我和它之间没有字符串解析。

标签: python exec libnotify


【解决方案1】:

您应该使用subprocess.call,它在一个新进程中启动由其参数命名的程序并等待子进程退出,而不是os.execv,它将当前进程中正在运行的程序替换为其参数指定的程序.

用法是subprocess.call(['/usr/bin/notify-send', 'App Title', 'Message'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多