【问题标题】:How to launch a Common Lisp GTK app from a command line script (or cron)?如何从命令行脚本(或 cron)启动 Common Lisp GTK 应用程序?
【发布时间】:2017-11-13 21:07:15
【问题描述】:

我编写了一个程序,使用 cl-cffi-gtk 和 Common Lisp 生成一个简单的托盘图标,名为 tray-icon.lisp,该程序在名为 hourly-player。我现在的问题是,虽然这个应用程序可以从命令行很好地启动,但从脚本启动它却有点困难。 如果我尝试

sbcl --eval '(asdf:load-system "hourly-player")' --eval '(hourly-player:run)' 

我的应用程序已正确加载到 SBCL REPL 中,并且托盘图标显示正确。但是,如果我添加 & 在后台启动我的脚本,它似乎会立即终止。

在我的 run 函数末尾添加一个 (loop) 可以防止脚本终止,但显然也占用了我的 CPU 比这样的应用程序所需的要多得多(根据 conky,与基本上相比,负载大约为 12%在 sbcl 中运行时什么都没有。

是否有一些规范的方法可以让我的脚本作为后台进程保持活跃?

我也知道还有其他执行 lisp 程序的方法,但它们要么共享相同的问题(例如核心转储),要么似乎破坏了我的系统定义依赖项(至少 buildapp 和 cl-launch 似乎这样做了)。

如果有帮助,可以在here找到我的项目。

【问题讨论】:

  • 你好,让你知道我喜欢一篇解释 lispy Gtk 应用程序基本结构的小博文 :)(在 reddit 上发帖以获取 exple)
  • 听起来很有趣,但我对 Gtk 还没有那么多经验,所以我不确定在这方面我是否可以提供任何帮助。据我所知,cl-cffi-gtk 我在这里用于我的项目似乎非常简单,因为我可以将我的应用程序与基本教程大纲和阅读一些文档拼凑在一起,至少在我遇到我在这里描述的问题。

标签: bash shell common-lisp gtk3 sbcl


【解决方案1】:

一个快速的方法可能是做(loop (sleep 60)) 来保持你的主程序活着。您可能还想看看使用 within-main-loop-and-wait 而不是 within-main-loop(来自 gtk+)。

【讨论】:

  • 哇,我什至没有考虑使用sleep。我肯定也会考虑使用within-main-loop-and-wait。我基本上只是开始学习 GTK 以获得更多使用 Lisp 的经验,但没有让我的程序在 REPL 之外运行让我发疯。我想我有点超前了。无论如何,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多