加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用带有来自scala的python -c命令的args运行python代码

发布时间:2020-12-16 08:46:36 所属栏目:安全 来源:网络整理
导读:我有 python代码,例如: import sysprint('1')print("2")print(sys.argv[1]) 请注意,它可以包含单引号,双引号和接受参数. 在我的服务中,我通过网络接收代码并应该执行它.我不想临时将代码保存为磁盘上的脚本,所以我想用python -c命令执行它. 我如何在bash(ht
我有 python代码,例如:

import sys

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

请注意,它可以包含单引号,双引号和接受参数.

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

我如何在bash(https://stackoverflow.com/a/29565580/1996639)中执行它:

$python3 -c $'import sysnprint('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) = {
    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,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))
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读