美文网首页
Scala调用外部命令

Scala调用外部命令

作者: SunnyMore | 来源:发表于2018-07-18 16:50 被阅读24次

1. 导入sys.process包

2. 调用方式:" 外部命令 " ! 双引号内+外部命令+感叹号

eg.

image

scala调用外部命令工作原理:

通过Scala代码可以直接调用jvm的系统功能或者os的系统功能或者os的shell命令,这可以极大的简化外部功能的实现,因为这种工作方式实际上复用了jvm和os本身提供的功能,作为scala本身是直接把结果拿过来,其实这是代码模块化和软件复用的一种表现。

其工作原理:

scala是基于jvm进程的,scala程序运行的时候会运行在jvm进程中,而jvm进程是os系统中一个普通进程,通过jvm可以直接和os进行交互,而os有例如启动进程等功能,所以Scala程序可以通过jvm调用外部功能

其他相关例子:

scala> import scala.sys.process._
// 只需在结尾用!号,就表示执行外部命令
scala> val list = "ls -l" !  

还可以重定向,甚至可以在java对象与命令之间:

scala> new java.net.URL("http://www.baidu.com") #> 
            new java.io.File("/tmp/baidu.html") !

注意,重定向必须用 new java.io.File("")封装,否则会当作命令,比如

scala> "ls" #> "/tmp/a" !

将会出错,必须

scala> "ls" #> new java.io.File("/tmp/a") !

管道的用法:

scala> val list = "ls -l" #|  "grep P" !

不能在命令表达式中直接用管道, 比如 "ls | grep XXX" 这样不灵,必须用 #| 声明。

要把System.getProperties里的内容重定向到一个文件如何实现?
下面的方法不行,它会将第一个表达式的结果当作命令来执行

scala>  System.getProperties.toString #> new java.io.File("/tmp/env") !

直接将文字重定向到一个文件,我现在还不知道怎么做。只能变通用写文件的啰嗦方式。

相关文章

网友评论

      本文标题:Scala调用外部命令

      本文链接:https://www.haomeiwen.com/subject/egxapftx.html