【问题标题】:Using subprocess under django to call a scala programdjango下使用子进程调用scala程序
【发布时间】:2013-01-11 16:26:36
【问题描述】:

我有一个 scala 程序,我想使用子进程从 django 中调用它:

encode_cmd = "/usr/local/share/scala/scala-2.10.0/bin/scala -cp /home/django/code/classes conn {}".format(self.id)
output = subprocess.Popen(encode_cmd, shell = True, stdout = subprocess.PIPE).stdout.read()

此代码在 python shell 中运行良好,但是当作为正常 web 服务器进程的一部分运行时,它无法找到 scala 依赖项(例如,scala 类引用 slick 库)失败并出现 java.lang.NoClassDefFoundError。

我已经尝试将特定用户指定为 mod_wsgi 守护进程的一部分,但这没有任何区别。

【问题讨论】:

  • 我没有看到您将任何 .jar 添加到类路径中。你应该像这样在你的命令中添加 jars:-cp /home/django/code/classes:/path/to/slick.jar,否则它只包含 .class 和包含每个包的类文件的文件夹。
  • 顺便说一句,尝试使用 bash 中的相同字符串,看看它说了什么。
  • 这似乎可以解决问题 - 谢谢! - 但是添加多个jar文件是否有捷径,还是我必须一个一个地做?

标签: python django scala subprocess


【解决方案1】:

你应该像这样在你的命令中添加 jars:-cp /home/django/code/classes:/path/to/slick.jar,否则它只包括 .class' 和包含每个包的类文件的文件夹。

如果你有很多 jar,你总是可以依赖 shell 扩展:/path/to/dependencies/*.jar

另一种选择是使用 SBT 的 xsbt-start-script-plugin 或 Maven 的 appassembler 插件来创建 shell 脚本

【讨论】:

  • 我从来没有让 *.jar 工作,但仍然发现我必须单独添加罐子。然而,这并不是什么大事。
猜你喜欢
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多