首页 > 解决方案 > 如何使用 scala 进程实用程序发送 EOF

问题描述

我想从一个必须接收可能无限长的字符串的 scala 程序内部启动一个 python 程序。因此,不可能将其作为 cmd 参数传递。

我的解决方案是通过标准流传输数据。但是,我找不到工作 bash 代码的 scala 版本:

bash 代码:

#/bin/bash
var="SOME REALLY LONG STRING THAT IS SEND TO THE PYTHON PROGRAM"
echo "$var" | ./readUntilEOF.py

斯卡拉代码:

import sys.process._
 
object main {

       def main(args : Array[String]) : Unit = {
           val cmd = "./readUntilEOF.py"
           val string = "SOME REALLY LONG STRING THAT IS SEND TO THE PYTHON PROGRAM"
           print("I am starting to send stuff...")
           val resultString = (string #| cmd.!!).!!
           print(resultString)
       }
 
}

读取UntilEOF.py:

#!/usr/bin/python3

import sys

if __name__ == "__main__":
    read = sys.stdin.read()
    print(read)

运行 bash 命令的输出:

#> ./scalaBashEquivalent.sh 
SOME REALLY LONG STRING THAT IS SEND TO THE PYTHON PROGRAM


运行 scala 代码的输出:

#> scala scala.sc
I am starting to send stuff...
/* and then it never terminates */

标签: pythonbashscala

解决方案


#<可以InputStream试试

(cmd #< new ByteArrayInputStream(string.getBytes)).!!

斯卡斯蒂


推荐阅读