【问题标题】:Construct a new scala program on the fly and run it after construction即时构建一个新的 scala 程序并在构建后运行它
【发布时间】:2015-04-16 04:23:29
【问题描述】:

我打算写一个服务

  1. 接收来自用户的请求
  2. 相应地构造另一个程序
  3. 将新构建的进程作为另一个进程运行并获取其输出和错误
  4. 在服务中得到关于构造程序退出的通知

我需要一个新进程而不是线程,因为新程序总是负载很重,可能会损坏 JVM。

而且我认为Scala - getting a callback when an external process exits 与我的要求非常相似,只是它调用的是现有程序。

在 Scala 中可能吗?我该怎么办?

【问题讨论】:

  • 从顶层的角度来看,您的想法听起来与 shell 已经在做的完全一样。为什么不使用流行的 shell 之一,例如重击?
  • 你签出Ideone了吗?他们有 Scala 支持;只要您可以连接到他们的服务器,您就可以使用他们的Sphere Engine online compiler 通过 API 执行此操作。
  • 根据您希望解决方案的动态程度,您可能无需代码生成就可以做到,因此这实际上取决于您的需求范围。

标签: scala


【解决方案1】:

关于用户输入和程序代码生成的第一部分似乎是编译器或翻译器。

有许多工具可以帮助在 Java 和 Scala 生态系统中实现翻译器或编译器。

构造的结果是scala源代码文件。 在 Linux 上运行此代码的一种方法是使用 shell 脚本。

例如

#!/bin/sh
exec scala "$0" "$@"
!#
object HelloWorld extends App {
  println("Hello, world!")
} 
HelloWorld.main(args)

为了运行,您可以从主程序调用 shell 命令。像这样的:

import scala.sys.process._
val cmd = "uname -a" // Your command
val output = cmd.!! // Captures the output

有关 scala.sys.process 的详细信息,请参阅scaladoc

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多