【问题标题】:System.cmd suppress output in ElixirSystem.cmd 抑制 Elixir 中的输出
【发布时间】:2016-07-12 14:16:44
【问题描述】:

我正在 Elixir 上使用 openssl 命令行生成一个 RSA 密钥对,一切正常,除了我无法抑制该命令的输出。

这就是我正在运行的:

{_, 0} = System.cmd "openssl", [ "genrsa", "-out", "privateKey.pem", "2048"]

我不断得到:

Generating RSA private key, 2048 bit long modulus .....+++
.....................................+++ e is 65537 (0x10001)

在我用 escript 编译并运行可执行文件之后。

【问题讨论】:

    标签: elixir


    【解决方案1】:

    System.cmd 从命令收集标准输出并将其返回,但这里发生的是 OpenSSL 正在写入标准错误,默认情况下不会捕获该错误,因此只会打印到终端。

    您可以使用选项stderr_to_stdout

    iex(2)> {_, 0} = System.cmd "openssl", [ "genrsa", "-out", "key.pem", "2048"],
                                [stderr_to_stdout: true]
    {"Generating RSA private key, 2048 bit long modulus\n.......................+++\n......................................+++\ne is 65537 (0x10001)\n",
     0}
    

    这意味着输出将在第一个元组元素中返回,而不是打印到终端。由于您忽略了返回值的那部分,因此在您运行程序时不会输出它。

    【讨论】:

    • 很好的答案,我从未意识到输出是用 stderr 编写的。
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2011-10-28
    相关资源
    最近更新 更多