python - 使用 applescript (重新)启动 python 脚本

标签 python shell applescript restart

我有一个在无限循环中运行的 Python 脚本(它是一个服务器)。

我想编写一个AppleScript,如果该脚本尚未启动,它将启动该脚本,否则强制退出并重新启动它。这将使我在编程时轻松更改服务器代码。

目前我只知道如何启动它:do shell script "python server.py"

最佳答案

请注意 AppleScript 的 do shell script默认情况下,在 root 目录 ( /bin/sh ) 中启动 shell ( / ),因此您应该指定到 server.py 的显式路径

在下面的示例中,我将假设目录路径 ~/srv .

这是 shell 命令:

pid=$(pgrep -fx 'python .*/server\.py'); [ "$pid" ] && kill -9 $pid; python ~/srv/server.py

作为 AppleScript 语句,包含在 do shell script 中- 请注意\ -逃脱的内心"\字符:

do shell script "pid=$(pgrep -fx 'python .*/server\\.py'); [ \"$pid\" ] && kill -9 $pid; python ~/srv/server.py"
  • pgrep -fx '^python .*/server\.py$'使用pgrep通过正则表达式针对完整命令行 ( -f ) 查找正在运行的命令,需要完全匹配 ( -x ),并返回 PID(进程 ID)(如果有)。

    • 请注意,我使用了更抽象的正则表达式来强调 pgrep (始终)将其搜索词视为正则表达式。
      要将完整的启动命令行指定为正则表达式,请使用 python ~/srv/server\.py - 请注意\ -逃逸.以实现完全的鲁棒性。
  • [ "$pid" ] && kill -9 $pid如果找到 PID,则终止进程([ "$pid" ][ -n "$pid" ] 的缩写,并且仅当 $pid 非空时评估为 true); -9发送信号SIGKILL ,强制终止进程。

  • python ~/srv/server.py然后(重新)启动您的服务器。

关于python - 使用 applescript (重新)启动 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40874607/

相关文章:

python - 从 python 列表中快速、独立随机抽取/样本 - 固定概率,而不是总数

python - 如何在 Jupyter 上以 HTML 格式导出当前笔记本

python - 使用 form.py 编辑模型

character-encoding - 将俄语文本写入txt文件

file - 在 AppleScript 中获取文件的最后修改日期

python - 使用 SSH+screen 远程启动 IPython,然后分离并注销

linux - 一次循环两个变量的shell脚本

bash - 如何使用 sed 用\(space) 替换空格?

c++ - 使用命令行交互编写后台程序

cocoa - 在 Mac OS X 中更改声音(或其他)系统偏好设置