![](/img/trans.png)
[英]How can Erlang os:cmd/1 run a command with Unicode characters?
[英]How to execute system command in Erlang and get results using os:cmd/1?
当我尝试执行以下在 Windows 上返回错误或不退出的命令时 - 我总是得到空列表而不是作为字符串返回的错误,例如:
我得到:
[] = os:cmd("blah").
而不是像
"command not found" = os:cmd("blah").
在 linux 中 - 一切都按预期工作,所以我得到“/bin/sh: line 1: blah: command not found\\n”
因此,当我需要知道执行如何完成等时,我不能依赖该函数。请建议一些如何执行命令并获取结果(包括错误代码)的一般方法。
谢谢!
我对 windows 一点都不熟悉,但我敢肯定,你应该看看这个。 这是实现os:cmd/1
函数。
os:cmd/1
有问题。 此函数不会让您知道命令执行是否成功,因此您只需要依赖某些命令外壳行为(取决于平台)。
我建议您使用erlang:open_port/2
函数。 类似的东西:
my_exec(Command) ->
Port = open_port({spawn, Command}, [stream, in, eof, hide, exit_status]),
get_data(Port, []).
get_data(Port, Sofar) ->
receive
{Port, {data, Bytes}} ->
get_data(Port, [Sofar|Bytes]);
{Port, eof} ->
Port ! {self(), close},
receive
{Port, closed} ->
true
end,
receive
{'EXIT', Port, _} ->
ok
after 1 -> % force context switch
ok
end,
ExitCode =
receive
{Port, {exit_status, Code}} ->
Code
end,
{ExitCode, lists:flatten(Sofar)}
end.
因此函数my_exec/1
将返回进程退出代码以及进程标准输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.