如何在 Racket 中返回系统命令的退出状态和输出?

Posted

技术标签:

【中文标题】如何在 Racket 中返回系统命令的退出状态和输出?【英文标题】:How to return exit status and output of system commands in Racket? 【发布时间】:2017-02-09 00:14:50 【问题描述】:

我不仅想捕获像 with 这样的命令的输出

(with-output-to-string (lambda () (system "ls -la")))

但也希望能够访问退出代码,这样我就不必解析输出来知道命令是否成功并且可以做出相应的反应。

如何在 Racket 中执行此操作?

我找到了关于subprocess 的文档,但我不知道如何提供标准输出等所有参数。我想看一些全面的例子,如果命令成功则使用输出,如果命令不成功,应该对退出代码有一些反应。

【问题讨论】:

【参考方案1】:

Racket 提供了一个system/exit-code 过程,类似于system,但返回退出代码而不是布尔成功指示符。否则它的行为与system 完全相同。

这么说,如果你只需要知道命令是否成功运行,而不需要实际的退出代码本身,system 实际上就足够了。正如文档所说,如果成功则返回 true,否则返回 false。

例如:

(with-output-to-string
  (lambda ()
    (unless (system "ls -la")
      ;; handle error here
      )))

【讨论】:

这很有意义,它已经回答了我的问题。我想在出现错误时打印命令的输出(并在成功时打印我自己选择的内容),我将如何在unless 表单中获取输出?

以上是关于如何在 Racket 中返回系统命令的退出状态和输出?的主要内容,如果未能解决你的问题,请参考以下文章

我需要安装 PLT Racket 的帮助,我将 Racket 文件夹移到 Applications 但我不知道如何在终端中使用 raco 命令

程序退出状态和 $?

返回与 bash 脚本中返回的命令不同的退出代码

怎样在一个 C 程序中调用另一个程序 (独立可执行的程序, 或系统命令)?

Shell命令的退出状态及错误检查

Python错误:subprocess.CalledProcessError:命令返回非零退出状态1 [重复]