1

按照 Ignacio 的建议(Python 删除空格并附加),我正在尝试将以下命令转换为使用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 文档并查看了此处,但我无法弄清楚!

顺便说一句,title并且text是来自 emesene messengers 通知系统的变量

4

2 回答 2

5

代替

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 期望的排序列表。

于 2011-06-10T17:44:34.167 回答
4

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

subprocess.call(['/usr/local/bin/growlnotify', '-n',  'emesene', '-a', 'emesene', '-t', title, '-m', text])
于 2011-06-10T18:14:50.400 回答