【问题标题】:Execute .jar from Python从 Python 执行 .jar
【发布时间】:2011-04-03 20:59:35
【问题描述】:

我正在尝试构建一个非常简单的 python 脚本来自动缩小/组合一些 css/js 资产。

我不确定如何正确处理缩小步骤。我使用 yui-compressor,通常直接从命令行调用 jar。

假设构建脚本与 rhino js.jaryui-compressor.jar 位于同一目录中,我可以像这样压缩 css/js 文件:

java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css

从终端调用它可以正常工作,但在 python 构建文件中,它不会 例如,os.system("...") 返回的退出状态是0,并且命令没有返回任何输出(例如,使用os.popen() 而不是os.system() 时)

我猜它与路径有关,可能是调用 os.system() 时 java 无法正确解析...有什么想法吗?

感谢您的帮助

【问题讨论】:

  • 在问题中包含您的 Python 代码。
  • 正是上面使用 os.system 调用的确切命令:os.system("java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css") 脚本和 jar 都位于同一目录中,并从该目录调用

标签: java python os.system


【解决方案1】:

我有一个有点类似的情况,当我想要一个 python 程序构建一些命令然后运行它们,输出到触发脚本的用户。我使用的代码是:

import subprocess
def run(cmd):
   call = ["/bin/bash", "-c", cmd]
   ret = subprocess.call(call, stdout=None, stderr=None)
   if ret > 0:
      print "Warning - result was %d" % ret

run("javac foo.java")
run("javac bar.java")

就我而言,我希望所有命令都运行错误,这就是为什么我没有在错误时引发异常。此外,我希望将任何消息直接打印到终端,因此我将 stdout 和 stderr 设置为 None ,这导致它们无法进入我的 python 程序。如果您对错误和消息的需求略有不同,请查看http://docs.python.org/library/subprocess.html 文档以了解如何调整发生的情况。

(我要求 bash 为我运行我的命令,以便我获得常用路径、引用等)

【讨论】:

    【解决方案2】:

    当命令正确执行时,os.system 应该返回 0。 0 是成功的标准返回码。

    从命令行运行时是否打印输出?

    【讨论】:

      【解决方案3】:

      为什么要在 Python 中执行此操作?对于这样的任务,尤其是 Java,最好使用Apache Ant。在 xml 中编写命令,然后 ant 为您运行。

      【讨论】:

      • 我认为关键是你有一些现有的 Java 代码需要与你正在编写的 Python 脚本集成。一般来说,你可以用 Python 用 Ja​​va 编写任何东西,但这并不实用。
      猜你喜欢
      • 2021-03-06
      • 2015-03-30
      • 1970-01-01
      • 2011-08-25
      • 2017-12-21
      • 1970-01-01
      • 2015-08-22
      • 2015-06-17
      • 2011-04-08
      相关资源
      最近更新 更多