【问题标题】:emacs print command outputemacs 打印命令输出
【发布时间】:2012-08-13 08:57:59
【问题描述】:

我有一系列使用这种语法的系统调用:

(call-process "/bin/sh" nil nil t "-c" command)

command 是 shell 命令。我想知道当我在commands.el 文件中有这些系统调用并使用emacs --script commands.el 调用它时,是否有办法打印输出。目前,命令已执行,但所有输出似乎都被捕获而不是打印。

【问题讨论】:

  • 输出通常收集在当前缓冲区中,但您已指定通过将nil 作为第三个参数将其丢弃。您也可以通过此参数指定不同的缓冲区。
  • 我必须在临时缓冲区中捕获它然后打印缓冲区吗?我为第三个参数尝试了t,但也没有打印出来(不确定作为脚本运行时的“当前缓冲区”是什么)。
  • 这听起来像是一个可行的解决方案,是的。如果您的会话在任何时候都没有设置缓冲区,我猜当前缓冲区最终将成为*scratch* 缓冲区。 (更新:已确认。)其中包含一些 cmets,因此最好在开始时创建一个新的空缓冲区。

标签: emacs elisp


【解决方案1】:

让 emacs 为您管理临时缓冲区可能更容易:

(defun run-it (cmd)
  "run CMD in shell and return result as string."
  (with-temp-buffer
    (call-process "/bin/sh" nil t t "-c" cmd)
    (buffer-string)))

【讨论】:

  • 如果你想运行这样的shell命令,只需使用现有的函数shell-command-to-string。代码几乎相同(查看 simple.el),但自动使用正确的 shell 等。
【解决方案2】:

那么是这样的吗?

(set-buffer (get-buffer-create " output"))
(mapc (function (lambda (cmd) (call-process "/bin/sh" nil t t "-c" cmd)))
  '("echo hello"
    "perl -e \"die qq(goodbye)\"") )
(message "%s" (buffer-string))

这会在输出结束时输出at -e line 1.。也许在它之前添加一个空行,或者想办法抑制它。

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2019-12-22
    • 2018-01-16
    • 2017-06-03
    • 2021-01-29
    • 2012-06-10
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多