1. 导入sys.process包
2. 调用方式:" 外部命令 " ! 双引号内+外部命令+感叹号
eg.
imagescala调用外部命令工作原理:
通过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") !
直接将文字重定向到一个文件,我现在还不知道怎么做。只能变通用写文件的啰嗦方式。
网友评论