按照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文档并看过这里,但我无法弄明白!
BTW title
和text
是来自emesene messengers通知系统的变量
答案 0 :(得分: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期望的排序列表。
答案 1 :(得分:4)
使用列表传递命令时,您不希望“shell = True”。 我本来只会在Jeremy Banks的帖子上发表评论(因为他对shlex.split的陈述最值得注意),但我现在没有代表这样做:/
subprocess.call(['/usr/local/bin/growlnotify', '-n', 'emesene', '-a', 'emesene', '-t', title, '-m', text])