【问题标题】:lua - dofile, how fill stdin from lua?lua - dofile,如何从 lua 填充标准输入?
【发布时间】:2015-02-09 16:38:56
【问题描述】:

http://www.lua.org/manual/5.1/manual.html#pdf-dofile告诉

dofile ([filename])

打开指定文件并将其内容作为 Lua 块执行。当不带参数调用时,dofile 执行标准输入 (stdin) 的内容。返回块返回的所有值。如果出现错误,dofile 会将错误传播给它的调用者(也就是说,dofile 不会在保护模式下运行)。

不带参数调用时如何从 lua 填充标准输入?

【问题讨论】:

    标签: lua


    【解决方案1】:

    如果您在命令 shell 中以交互模式运行 lua 脚本或 lua 解释器,则调用 dofile() 只会从标准输入获得输入。您会在 shell 中看到一个闪烁的光标,您可以在其中输入要运行的 lua 代码。

    注意,以这种方式运行dofile 是一个阻塞 调用,这意味着脚本中的执行流程或lua 解释器将暂停,直到它读取到eof。通常这意味着您必须在 windows 下输入 Ctrl + Z 或在 *nix bash shell 下输入 Ctrl + D

    【讨论】:

    • 这里是否有任何代表 EOF 的符号来结束输入,以便我可以输入任何代码和该符号而不是 ctrl-z 或 ctrl-D?或者也许这是将原始代码作为参数传递给 dofile 的某种方式?
    • 点击ctrl + z应该输入eof。之后只需点击enter。如果您使用的是 posix 环境,请改用 ctrl + d
    • ctrl-z 在我的情况下不能使用,因为通过客户端聊天发送到服务器的命令,当我在没有参数的情况下远程运行 dofile 时,服务器主循环似乎暂停并且服务器无法读取任何客户端命令或做任何其他事情:(
    • 您是否尝试过使用loadstring 并传递您要运行的代码?
    • 是的,但是由于宿主程序的限制,我不能使用成语 loadstring("code")(),只能使用 loadstring("code") 并且不能将其结果返回给任何变量跨度>
    【解决方案2】:

    这是一个例子:

    -bash-4.0$ ./lua
    Lua 5.3.0 (alpha)  Copyright (C) 1994-2014 Lua.org, PUC-Rio
    > dofile()
    a = 3; print(a)
    3
    > 
    

    输入a = 3; print(a)后,按Ctrl + D,在Unix上代表EOFdofile() 加载输入并执行它。

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 2014-11-29
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多