为什么:io.columns在运行escript时失败

为什么:io.columns在运行escript时失败,io,command-line-interface,elixir,Io,Command Line Interface,Elixir,我正在开发一个CLI界面,希望获得当前正在使用的终端的列数 我发现了,它在iex中工作得很好,但是一旦我用mix编译了escript二进制文件,运行mix-escript.build,然后运行它,然后:io.columns返回{error,enotsup} IO设备没有正常冒泡是怎么回事?如何访问列号?还没有找到它不起作用的原因,但我将发布我使用的解决方案:直接与bash交谈 $tput cols以bash为单位给出列数,因此 对于长生不老药:System.cmd(“tput”,“cols”)

我正在开发一个CLI界面,希望获得当前正在使用的终端的列数

我发现了,它在iex中工作得很好,但是一旦我用mix编译了escript二进制文件,运行
mix-escript.build
,然后运行它,然后
:io.columns
返回
{error,enotsup}

IO设备没有正常冒泡是怎么回事?如何访问列号?

还没有找到它不起作用的原因,但我将发布我使用的解决方案:直接与bash交谈

$tput cols
以bash为单位给出列数,因此

对于长生不老药:
System.cmd(“tput”,“cols”)

对于erlang:
:os.cmd('tput cols')

这是由于最近的erlang/OTP版本中出现了一个错误。该缺陷很可能在下一版本中修复

在修复错误之前,以下变通方法可能有用:

-模块(测试)。
-导出([main/1])。
main(u41;)->
io:format(“列数:~p~n,[my_columns()])。
我的_列()->
Parent=self(),
产卵(
乐趣()->
Port=erlang:open_Port({spawn,“tput cols”},
[使用_stdio,in,stream,{line,10000}],
纵队=
接收
{Port,{data,{{{,Line}}}->
erlang:列出\u到\u整数(行)
完,,
父项!{my_columns\u msg,columns},
繁殖(有趣的阅读器()->
接收
{{u端口,{data,{{{u,{}}}->
读取器();
_->好的
结束
(完)
(完),,
接收
{my_columns\u msg,columns}->columns
结束。

请注意,调用
os:cmd(“tput cols”)
(在@nichochar的回答中建议)不起作用,因为
stdout
stdin
os:cmd/1

调用
tput
时将不会连接到终端。Mac系统:Erlang/OTP 20[erts-9.0.4][source 64位][smp:4:10][async threads:0][hipe][kernel poll:false][dtrace]Eshell V9.0.4(使用^G中止)(test1@127.0.0.1)1> os:cmd(“tput cols”)。“80\n”(test1@127.0.0.1)2> io:columns()。{好的,141}但是bash$tput cols是141吗`