newLISP运行scp命令并打印进度

如果在终端直接运行scp命令,会看到类似的输出

scp train.html root@your-host:/path/of/your/folder
train.html                                    100%  149KB 149.4KB/s   00:00    


如果用newlisp的exec运行这个命令,得到的结果却是

()


如何获得上面的输出?

train.html                                    100%  149KB 149.4KB/s   00:00 


首先要获得scp的输出,参考这个: http://stackoverflow.com/questions/202432/how-to-best-capture-and-log-scp-output

依靠script命令,可以运行scp,并将输出结果写入日志文件

script -q -c \"scp train.html root@your-host:/path/of/your/folder" > scp.log


然后用newlisp exec运行上面的命令,运行后,读取文件scp.log的内容并显示出来

(println "run the following command now:")
(println syn-cmd)

(println (exec syn-cmd))
(set 'in-file (open "scp.log" "read"))
(while (read-line in-file)
  (println (current-line)))
(close in-file)

syn-cmd的值就是上面的script命令

现在结果打印出来了

train.html                                    100%  149KB 149.4KB/s   00:00

仍有不足,以后完善:

1. script运行scp的结果return code如何获取,虽然有-e参数,但是newlisp exec好像没有得到

2. scp.log里面有多行,但是用(while ... (println)) 只显示了最后一行,有点奇怪。

3. 最好能够实时的获得scp的输出进度,而不是等完成之后。








©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页