我正在寻找一种在批处理模式下执行时在循环内获取用户输入的方法。
readLines()
和scan()
仅适用于交互模式,在批处理模式下,它们开始以代码行的形式读取用户输入,除非所有代码都被{}
包围,这很不方便。我需要一个简单的解决方案来获得一个整数值,我只需输入值并按ENTER键,所以
我无法找到满足这两个条件的方法,例如:来自gWidgets的ginput()
激活输入字段,但ENTER不会触发表单提交。
答案 0 :(得分:1)
我现在无法测试,但请查看?menu
并弹出一个gui窗口。
我不确定这是否可行,但它的不同之处在于需要鼠标点击响应。
原始答案:
根据?readline
的文档:
这只能用于交互式会话 ..
在非交互式使用中,结果就像响应是RETURN并且值是“”。
如果您只是在等待一条信息,并且在开始执行脚本之前您不知道这条信息(可能会做出决定,这取决于脚本中较早的结果),然后一种方法是简单地将你的脚本分成三部分:
通过在交互式会话中调用第二个端点,将第三个链接在一起。然后通过调用第三个结束第二个结束。
答案 1 :(得分:1)
以下是我解决自己问题的方法:
require(gWidgets)
options(guiToolkit="RGtk2")
INPUT <- function(message) {
CHOICE <- NA
w <- gbasicdialog(title=message, handler = function(h,...) CHOICE <<- svalue(input))
input <- gedit("", initial.msg="", cont=w, width=10)
addHandlerChanged(input, handler=function (h, ...) {
CHOICE <<- svalue(input)
dispose(w)
})
visible(w, set=TRUE)
return(CHOICE)
}
repeat{
x=INPUT("Input an integer")
if(!is.na(as.integer(x))) break
}
print(x)