gpt4 book ai didi

scala - 如何使用 args 和 Scala 中的 python -c 命令运行 python 代码

转载 作者:行者123 更新时间:2023-12-04 21:30:09 24 4
gpt4 key购买 nike

我有python代码,例如:

import sys

print('1')
print("2")
print(sys.argv[1])

备注 它可以包含单引号、双引号并接受参数。

在我的服务中,我通过网络接收代码并且应该执行它。我不想将代码临时保存为磁盘上的脚本,所以我想用 python -c 执行它命令。

我如何在 bash( https://stackoverflow.com/a/29565580/1996639 ) 中执行它:
$ python3 -c $'import sys\nprint(\'1\')\nprint("2")\nprint(sys.argv[1])' 3
1
2
3

我的问题:如何从 Scala 执行示例代码?
  import sys.process._
def runCommand(cmd: String): (Int, String, String) = {
val stdoutStream = new ByteArrayOutputStream
val stderrStream = new ByteArrayOutputStream
val stdoutWriter = new PrintWriter(stdoutStream)
val stderrWriter = new PrintWriter(stderrStream)
val exitValue = cmd.!(ProcessLogger(stdoutWriter.println, stderrWriter.println))
stdoutWriter.close()
stderrWriter.close()
(exitValue, stdoutStream.toString, stderrStream.toString)
}


val code =
"""
|import sys
|
|print('1')
|print("2")
|print(sys.argv[1])
""".stripMargin

val arg = 3

val cmd = ???

val (exitCode, std, err) = runCommand(cmd)

最佳答案

您可以利用 Scala 的 ProcessBuilder方法也接受 Seq[String] .

import sys.process._
object SO {
def runCommand(cmd: String*): (Int, String, String) = {
val stdoutStream = new java.io.ByteArrayOutputStream
val stderrStream = new java.io.ByteArrayOutputStream
val stdoutWriter = new java.io.PrintWriter(stdoutStream)
val stderrWriter = new java.io.PrintWriter(stderrStream)
val exitValue =
cmd.!(ProcessLogger(stdoutWriter.println, stderrWriter.println))
stdoutWriter.close()
stderrWriter.close()
(exitValue, stdoutStream.toString, stderrStream.toString)
}

def main(args: Array[String]): Unit = {
val code =
"""
|import sys
|
|print('1')
|print("2")
|print(sys.argv[1])
""".stripMargin

val arg = 3
println(runCommand("python3","-c", code, arg.toString))
}
}

关于scala - 如何使用 args 和 Scala 中的 python -c 命令运行 python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54330536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com