本质就是接管外部进程的标准输出
这里使用wget.exe以20Kb/s下载一个1GB的测试文件为例子
wget.exe需要自备,这里不提供下载
三种方案都注释了,自行编辑分别测试。
源代码:
io.open();
o = `1GB.bin`; i = `http://speed.hetzner.de/1GB.bin`; cmd = `--limit-rate=20k -t 0 -O "%s" "%s"`; cmd = string.format(cmd,o,i);
/**** 方案一 // hold住后面的执行语句 // 外部执行完毕,再继续向下执行 // 但是ctrl+c的时候不会结束外部进程 import process.popen; var prcs = process.popen("wget.exe", cmd); prcs.logResponse(); ****/
/**** 方案二 // 仅仅是把外部的输出重定向到标准输出上 // 不等待外部进程结束,立刻执行下一条指令 // 当按下ctrl+c的时候,一起结束 io.popen("wget.exe "++cmd,"r"); /****/
/**** 方案三 // hold住后面的执行语句 // 外部执行完毕,再继续向下执行 // 当按下ctrl+c的时候,一起结束 file = io.popen("wget.exe "++cmd,"r"); line = file.read(); while( line ) { io.print(line); line = file.read(); }
file.close(); ****/
|