我在OSX Terminal中使用osascript -e 'quit app "Quicktime Player 7"'关闭Quicktime Player 7应用程序,该应用程序运行良好,但无法使用python来运行相同的命令。我究竟做错了什么?

这只是运行,但不执行任何操作:

command = ['osascript', '-e', 'quit app', 'Quicktime Player 7']
p = subprocess.Popen(command)

最佳答案

quit appQuicktime Player 7作为两个列表元素将把subprocess.Popen执行的命令转换为如下形式:

osascript -e 'quit app' 'Quicktime Player 7'


osascript期望-e之后的参数是“脚本的一行”(请参见osascriptman-page)。
拆分参数会导致osascript执行quit app并将Quicktime Player 7解释为参数,因此可能会忽略它。

一个简单的修复方法如下:

command = ['osascript', '-e', 'quit app "Quicktime Player 7"']
p = subprocess.Popen(command)


如果您不想首先使用列表/拆分命令,则可以使用shlex.split为您完成工作:

import shlex
command = shlex.split("osascript -e 'quit app \"Quicktime Player 7\"'")
p = subprocess.Popen(command)

10-07 21:29