SBCL:在运行时收集运行程序进程的输出

j烧

尊敬的StackExchange成员,

我最近开始尝试使用Common Lisp,并希望创建一个用于管理修改后的Minecraft服务器的Web界面。我已经尝试过此解决方案,但是在这种情况下,该函数只是挂起而永不返回。

我的代码如下所示:

(defvar *proc*)

(defun create-minecraft-proc ()
  (let* ((binary "/usr/bin/java")
    (jar "/home/user/temp/Vanilla 1.8/minecraft.jar")
    (dir "/home/user/temp/Vanilla 1.8")
    (args (list "-jar" jar "nogui")))
    (setf *proc* (sb-ext:run-program binary args :directory dir :wait nil :input :stream :output :stream))))

(defun copy-stream (in out)
  (loop for line = (read-line in nil nil)
     while line
       do (write-line line out)))

(defun get-minecraft-output ()
  (with-open-stream (proc-stream (process-output *proc*))
    (with-output-to-string (out)
      (copy-stream (process-output *proc*) out)))

如何获得一个字符串,其中包含直到那时的完整进程输出,而不必等待其终止?

扔掉账户

通过试用/bin/cat,我发现了一些可能对您有所帮助的东西。

首先,请务必finish-output在写入过程输入后使用:

(format (process-input *cat*) "Hello~%")
(finish-output (process-input *cat*))

否则,除非关闭输入流,否则输入可能无法到达子流程。如果Minecraft在生成任何输出之前需要输入,那么尝试在没有所需输入的情况下从其输出中读取将导致SBCL挂起,而这种方式无法用SLIME中的Cc Cc恢复。

其次,用于listen确定是否已生成任何输出:

(when (listen (process-output *cat*))
    (read-line (process-output *cat*)))

使用finish-outputlisten,可以逐步从cat的标准输出中读取内容时避免挂起。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行命令行进程并在该进程仍在运行时获取输出?

来自分类Dev

在运行时更改WIX安装程序语言

来自分类Dev

pygtk是否会垃圾收集运行时创建的函数连接到信号?

来自分类Dev

为什么我的程序在运行时给我错误的输出?

来自分类Dev

在运行时提升Java应用程序

来自分类Dev

如何在运行时禁用cout输出?

来自分类Dev

在程序仍在运行时,如何查看nohup文件?

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

matplot程序在运行时给出无响应的窗口

来自分类Dev

是否可以在运行时在SBCL / Common Lisp中检查/获取函数类型或其签名?

来自分类Dev

GDB在运行时输出不同的值

来自分类Dev

在Java中,如何找到进程在运行时使用的垃圾收集器?

来自分类Dev

进程仍在运行时如何退出Powershell?

来自分类Dev

Python:启动终端程序并在运行时解析其输出

来自分类Dev

进程暂停时Java运行时执行程序getInputStream

来自分类Dev

在进程仍在运行时旋转日志文件

来自分类Dev

SBCL:在运行时收集运行程序进程的输出

来自分类Dev

当程序有大量输出时,sbcl运行程序会挂起

来自分类Dev

从Java应用程序将jdb作为进程运行时,输出不完整

来自分类Dev

Chrome扩展程序是否在Opera上运行时如何在运行时检查?

来自分类Dev

为什么我的程序在运行时在命令窗口中什么都不输出?

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

是否可以在运行时动态指定输出参数

来自分类Dev

如何在运行时更改应用程序输出类型

来自分类Dev

是否可以在运行时获取从属进程的索引?

来自分类Dev

通过使用Reflection.Emit创建程序集运行时。在mvc5中

来自分类Dev

将程序输出重定向到文件,但不在运行时结束时

来自分类Dev

在运行时更改子进程的终止信号

来自分类Dev

如何在运行时将 C 程序的输出连接到 python 程序

Related 相关文章

  1. 1

    运行命令行进程并在该进程仍在运行时获取输出?

  2. 2

    在运行时更改WIX安装程序语言

  3. 3

    pygtk是否会垃圾收集运行时创建的函数连接到信号?

  4. 4

    为什么我的程序在运行时给我错误的输出?

  5. 5

    在运行时提升Java应用程序

  6. 6

    如何在运行时禁用cout输出?

  7. 7

    在程序仍在运行时,如何查看nohup文件?

  8. 8

    在运行时从父终端临时禁用子进程

  9. 9

    matplot程序在运行时给出无响应的窗口

  10. 10

    是否可以在运行时在SBCL / Common Lisp中检查/获取函数类型或其签名?

  11. 11

    GDB在运行时输出不同的值

  12. 12

    在Java中,如何找到进程在运行时使用的垃圾收集器?

  13. 13

    进程仍在运行时如何退出Powershell?

  14. 14

    Python:启动终端程序并在运行时解析其输出

  15. 15

    进程暂停时Java运行时执行程序getInputStream

  16. 16

    在进程仍在运行时旋转日志文件

  17. 17

    SBCL:在运行时收集运行程序进程的输出

  18. 18

    当程序有大量输出时,sbcl运行程序会挂起

  19. 19

    从Java应用程序将jdb作为进程运行时,输出不完整

  20. 20

    Chrome扩展程序是否在Opera上运行时如何在运行时检查?

  21. 21

    为什么我的程序在运行时在命令窗口中什么都不输出?

  22. 22

    在运行时从父终端临时禁用子进程

  23. 23

    是否可以在运行时动态指定输出参数

  24. 24

    如何在运行时更改应用程序输出类型

  25. 25

    是否可以在运行时获取从属进程的索引?

  26. 26

    通过使用Reflection.Emit创建程序集运行时。在mvc5中

  27. 27

    将程序输出重定向到文件,但不在运行时结束时

  28. 28

    在运行时更改子进程的终止信号

  29. 29

    如何在运行时将 C 程序的输出连接到 python 程序

热门标签

归档