我在一个lua脚本运行的时候,在一个functionui几乎为零的环境中工作。 这对于我需要编写的脚本来说是不可接受的,而脚本在很大程度上依赖于用户input。 我发现绕过这一切的唯一方法是使用io.popen与一些相当狡猾的命令。
我意识到我在这里要做的事情是奇怪的,而且是非常错误的,而且我已经把自己带到了这里,但是我无法弄清楚这个代码片段中出现了什么问题:
local a = 'f' local p = io.popen( 'echo -~`~-,_,- Editing '..(a == 'f' and 'foreground' or 'background')..' -~`~-,- > con && '.. --display text to the user 'set /pf= Find block: > con < con && '.. --user input 'call echo %f% &&' .. --pass f back to the lua script 'set /pr= Replace with: > con < con && '.. --user input 'call echo %r% &&' .. --pass r back to the lua script 'pause < con',"r") local f = p:read("*a") --read what was passed back,later parse it back into 2 variables p:close()
我期望发生的事情:
向用户显示“命令提示符窗口”,询问input。
用户input2个值。
这些值在input时回显给lua脚本。
这些值从pipe道中读取并存储起来供以后使用。
命令行等待按键,然后closures。
究竟发生了什么:
向用户显示“命令提示符窗口”,询问input。
用户inputf的值。
f被回传给lua脚本。
用户inputr的值。
r回显到控制台。 (!!!)
f从pipe道读取。 r不存在。
命令行等待按键,然后closures。
这个非常相似的代码示例工作得很好,但只返回1个variables:
p = io.popen( 'echo What do you want to do? > con && '.. 'echo G: remove girders > con && '.. 'echo F: swap foreground > con && '.. 'echo B: swap background > con && '.. 'echo U: undo all edits > con && '.. 'echo C: cancel > con && '.. 'set /pa= Choose an option: > con < con && '.. 'call echo %a%',"r") a = string.lower(p:read("*a"):gsub("n","")) p:close()
我做错了什么,我怎么能改写这个为我的目的工作? 我释放了世界上的什么东西,我怎么把灵魔放回瓶子里?
cmd工程,但C: windows System32 cmd.exe不
发送命令以使用/ proc进行处理
在bash中删除长度小于2的单词
这个版本没有指定目标
添加Git到PATHvariables – 在AppData / Local下找不到GitHub
可以运行更新,它的工作原理,但提交说非法仓库url“'?
Bash'printf'相当于命令提示符?
无法通过Ant运行windows命令,但可以在cmd.exe上运行
找出一个二进制文件是否已经被堆栈粉碎保护编译
ps:干净的方式只获得父进程?
经过一段时间的搜索,我发现这一点:
( echo some output echo more output )>"Your logfile
从批处理文件中重定向输出
我不知道你可以封装这样的命令,自从我第一次发现它之后,我一直在修改windows Cli。
local a = 'f' local p = io.popen( 'echo -~`~-,- > con && '.. --display text to the user '( set /pf= Find block: && '.. --user input 'set /pr= Replace with: ) > con < con && '.. --user input 'call echo %f% &&' .. --pass f back to the lua script 'call echo %r% &&' .. --pass r back to the lua script 'pause < con > con',later parse it back into 2 variables p:close()
如上所述包装两个set /p语句的工作 – 我得到f的预期输出,后面跟着一个换行符,然后r ,全部发回到他们所属的lua脚本。
不过,如果任何人都可以为我解释为什么这是一个问题,我会非常感兴趣的解释。
local p = io.popen( -- create temporary .bat-file 'set tmpf="%TEMP%\TMP%rANDOM%.BAT" &&'.. 'cmd /c"(echo @set p=^%1&echo @set /px= ^%p:~1,-1^%^>con&echo @call echo ^%x^%)>%tmpf%" &&'.. -- Your main program 'echo. -~`~-,- > con &&'.. --display text to the user 'call %tmpf% "Find block:" < con &&'.. -- pass f back to the lua script 'call %tmpf% "Replace with:" < con &&'..-- pass r back to the lua script -- delete temporary .bat-file 'call del %tmpf% > con &&'.. 'pause < con',"r") local f = p:read'*a' p:close()
总结以上是内存溢出为你收集整理的Lua – popen 2x'&&'chained set / p – stdout需要休假全部内容,希望文章能够帮你解决Lua – popen 2x'&&'chained set / p – stdout需要休假所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)