Rscript readLines () блокирует, пока не переведен в фоновый режим - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь использовать readLines(), чтобы получить от пользователя подтверждение того, что конфигурация была прочитана правильно перед запуском действительно длинного пакетного сценария, и она ведет себя очень странно.

Вот тестовый сценарий I Я работаю с:

f = file("stdin","r");
cat("go go go\n")
invisible(readLines(f, 1))
cat("done!\n")

Вот что я хочу сделать:

$ Rscript test.R
go go go
[script pauses until user presses enter]
done!
$

Вот что он делает вместо этого:

$ Rscript test.R
go go go
[user presses enter]
[nothing happens]
[user presses ^C]
[nothing happens]
[user presses ^Z]
[1]+  Stopped                 Rscript test.R
$ bg 1
[1]+ Rscript test.R &
done!
$

Ват.

Когда я выполняю эхо в stdin перед запуском скрипта, он работает:

$ echo "\n" | Rscript test.R
go go go
done!
$

Когда я изменяю скрипт на использование stdin(), он, вероятно, предсказуемо берет свой мяч и возвращается домой, так как Rscript не работает в интерактивном режиме:

$ Rscript scripts/test.R 
go go go
$ [<-- distinct lack of 'done!']
$ echo "\n" | Rscript scripts/test.R
go go go
$ [<-- same]

Есть идеи? Моя резервная копия - просто добавить большую Sys.sleep(), чтобы у пользователя было время на ^ C, если это необходимо, но это всегда грубо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...