Как выйти после запуска IO.read(:stdio, :all) в Elixir iex?

Мне нужно протестировать некоторый поток входных данных и использовать «IO.read», но после ввода данных я не могу выйти из этого режима, CTRL-Z/X/C/D не помогает (он завершает весь iex). Итак, как правильно использовать команду EOF для этого режима? Спасибо!


person Sasha B.    schedule 07.06.2018    source источник
comment
Для любой операции чтения ввода-вывода правильное завершение EOF будет ^D.   -  person Aleksei Matiushkin    schedule 07.06.2018
comment
Судя по всему, не работает в iex сессии по неизвестной причине.   -  person Aleksei Matiushkin    schedule 07.06.2018


Ответы (1)


TL;DR: используйте ^G, а затем j, i [nn] и c [nn].


Как в erl, так и в iex оболочках вы всегда можете ^G войти в режим «Команда переключения пользователя». Введите h для помощи там.

iex|1 ▶ IO.read :stdio, :all

^G
User switch command
  --> j
    1* {erlang,apply,[#Fun<Elixir.IEx.CLI.1.96155272>,[]]}
  --> i 1
  --> c 1
{:error, :interrupted}

iex|2 ▶

Примечание: правильное завершение EOF будет ^D во всех терминалах. Честно говоря, я понятия не имею, почему это не работает должным образом на консолях erl/iex.

person Aleksei Matiushkin    schedule 07.06.2018
comment
Странно, но у меня это не работает на MacOS 10.13. После c 1 он не возвращает значение, а просто переходит в то же состояние, что и до нажатия ^G. - person Dogbert; 07.06.2018
comment
@Dogbert о, спасибо за острый глаз; Я скопировал один из своих экспериментов, не последний удачный. Следует прервать работу, прежде чем переключиться на нее. Обновлено. - person Aleksei Matiushkin; 07.06.2018
comment
Поскольку все входные данные попадают в ваш IO.read, ваш код должен каким-то образом сделать эти данные доступными. Для этого можно использовать ETS или Agent или что-то подобное. - person Aleksei Matiushkin; 08.06.2018