【发布时间】:2021-06-03 01:42:52
【问题描述】:
我想从一个 scala 程序中启动一个 python 程序,该程序必须接收一个可能无限长的字符串。因此无法将其作为 cmd 参数传递。
我的解决方案是通过标准流传输数据。但是,我找不到工作 bash 代码的 scala 版本:
bash 代码:
#/bin/bash
var="SOME REALLY LONG STRING THAT IS SEND TO THE PYTHON PROGRAM"
echo "$var" | ./readUntilEOF.py
scala 代码:
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)
}
}
readUntilEOF.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 */
【问题讨论】:
-
不幸的是,它比您想象的要复杂一些。查看this question的答案