scala – 如何为外部命令提供输入?
据我所知,Scala可以运行系统命令并接收输出.我正在为我的系统命令编写一个Web客户端,所以说我需要执行命令,接收输出,根据输出我可以给它一个命令.我想继续这样做,直到用户杀死命令.我已经阅读了一些关于ProcessIO的内容,我已经获得了从scala运行并接收输出的命令,但是我怎样才能给它输入?
编辑:我正在寻找的是,我用scala调用命令.我调用的命令要求输入,用户将输入提供给scala程序,然后将其传递给被调用的程序. 一个例子: Scala计划 – >呼叫系统程序 – >系统程序要求输入用户名和密码 – > Scala Program程序然后要求用户和用户提供输入的用户名和密码 – > Scala程序将输入传递给系统程序. 我想保持这个过程活着,同时输入它. 解决方法
如果您打算让用户向控制台提供除stdin之外的其他内容,我无法从您的问题中判断出来.虽然我怀疑你希望Scala程序中“完全包含”这一点,但我还是无法解决这个问题.但是,如果使用控制台是可以接受的,这里是一个简单的Scala程序的示例,它要求输入用户名/密码,另一个Scala程序启动它并使用Process.run(true)将调用的程序的out / err连接到控制台,同时输入可以提供给控制台.
SimpleProgram测试输入: package so import java.util.Scanner object SimpleProgram extends App { def getInput(prompt: String): Option[String] = { print( s"$prompt: " ) val sc = new Scanner(System.in) sc.hasNextLine match { case true => val out = sc.nextLine if( out.length > 1 ) Some(out) else None case _ => None } } while( true ) { (getInput("username"),getInput("password")) match { case (Some(u),Some(p)) => println( s"Logged in as $u" ); System.exit(0) case _ => println( "Invalid input. Please try again." ) } } } 这里是调用ProcessBuilder的程序(类路径不能用于更改): package so import scala.sys.process._ object ProcessBuilderTest extends App { val classpath = "<path to>/scala-library.jar:./classes" val pb = Process("java",Seq("-cp",classpath,"so.SimpleProgram" )) pb.run(true) // all the magic happens here. } 在这种情况下,Process基本上只是将调用的程序包装在ProcessBuilder中.我无法使用提供方法的ProcessIO来使用相应的字符,并且仍然会杀死流等.我的猜测是,查看工作运行(真实)情况将是有益的. 以下是使用更正的类路径运行后者的控制台日志记录的示例: username: foo password: Invalid input. Please try again. username: foo password: bar Logged in as foo 我正在使用“java”来运行Scala代码,因为除了Eclipse之外我没有在我的mac上安装Scala.从Eclipse开始,ProcessBuilderTest从包含两个类的项目目录运行,输出目录设置为“classes”而不是“bin”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- vim – 如何更改Sublime Text 3中的自动完成选择
- Bootstrap布局
- twitter-bootstrap – Twitter Bootstrap跨越溢出
- Bootstrap:class loader creation threw excepti
- webservice soap wsdl 在线接口
- twitter-bootstrap – Bootstrap表默认排序
- 无法将MySQL容器连接到docker中的Tomcat容器
- angularjs – angucomplete-alt:当文本不匹配时
- 如何将两个scalaz流与谓词选择器组合?
- angularjs – 警告:无法读取未定义的属性’main