System.cmd抑制Elixir中的输出

时间:2016-07-10 18:30:18

标签: elixir

我使用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编译后运行可执行文件。

1 个答案:

答案 0 :(得分:8)

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}

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