【问题标题】:Using Python subprocess rather than os.system使用 Python 子进程而不是 os.system
【发布时间】:2011-09-12 16:46:29
【问题描述】:

按照 Ignacio (Python remove spaces and append) 的建议,我正在尝试将以下命令转换为使用 subprocess 而不是 os.system

脚本:os.system("/usr/local/bin/growlnotify -n emesene -a emesene -t """+title+""" -m """+text+"""""")

我想:subprocess.call(['/usr/local/bin/growlnotify', '-n emesene', '-a emesene', '-t ""+title+"""', '-m """+text+"""""'], shell=True)

但它不起作用。任何想法如何让这个工作?我查看了 Python 文档并查看了此处,但我无法弄清楚!

顺便说一句,titletext 是来自 emesene messengers 通知系统的变量

【问题讨论】:

  • 考虑接受 Ignacio 在链接问题中的回答。

标签: python shell subprocess os.system


【解决方案1】:

当您使用列表传递命令时,您不希望“shell=True”。 我只会对 Jeremy Banks 的帖子发表评论(因为他在 shlex.split 上的声明最为引人注目),但我目前没有代表这样做:/

subprocess.call(['/usr/local/bin/growlnotify', '-n',  'emesene', '-a', 'emesene', '-t', title, '-m', text])

【讨论】:

    【解决方案2】:

    代替

    subprocess.call(['/usr/local/bin/growlnotify', '-n emesene', '-a emesene', '-t ""+title+"""', '-m """+text+"""""'], shell=True)
    

    使用

    subprocess.call(['/usr/local/bin/growlnotify', '-n',  'emesene', '-a', 'emesene', '-t', title, '-m', text], shell=True)
    

    在 shell 命令中有一个不带引号的空格的地方,拆分另一个列表项。

    shlex.split 函数可用于将 shell 样式的命令转换为 Subproces 期望的排序列表。

    【讨论】:

    • 不起作用。给出一个空白通知,所以我猜它没有接受变量。
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2016-05-23
    • 2015-08-10
    • 2017-11-24
    • 2011-11-03
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多