【问题标题】:Controlling output file of a java jar using command line使用命令行控制 java jar 的输出文件
【发布时间】:2016-02-15 11:40:43
【问题描述】:

我正在使用.jar 文件,但不幸的是,它是一个黑匣子,即我不知道里面到底有什么,也不知道它是如何工作的。

我正在从 Python 脚本向 Mac 终端发送命令。我输入以下命令:

java -jar jarfile.jar req_data /abs_path/to/required/data input path/to_my_/input/file.txt

这可以满足我的需要:使用“黑匣子”分析输入并创建带有分析输出的新文件。这个新文件是在jarfile.jar 所在的文件夹中创建的。

我希望在创建时将此文件放在其他位置。

我尝试过使用> 运算符,指定路径,例如:

java -jar jarfile.jar req_data /abs_path/to/required/data input path/to_my_/input/file.txt > /output/path/

这在我想要的位置创建了 a 文件,但它只是来自终端的消息,说“操作已成功执行” - 分析结果文件是在与以前相同的文件夹中创建的. 我也试过%*>,但是报错了。

作为一个糟糕的解决方法,我现在有一个函数,它可以追溯查找所有新创建的文件(分析输出)并将其移动到我想要的文件夹中。

有没有办法用命令行原始命令中控制输出文件?还是在我的jar 文件中的某处指定的内容?我的问题是不允许编辑它。

【问题讨论】:

  • 当您使用来自不同工作目录的绝对路径调用 jar 时会发生什么?你有反编译jar吗?也许它支持命令行参数或包含您可以从自己的 Java 代码轻松调用的类。
  • 如果我从具有绝对路径的不同目录调用它,该文件仍会在 jar 文件本身所在的位置创建。我发现我可以在 jar 文件上运行 -help,这为我提供了一些其他选项(特定于黑盒魔法),但没有用于指导输出文件。

标签: java python jar terminal


【解决方案1】:

我是 python 新手。但是,如果它们对您有用,我可能会建议尝试一些事情。道歉我,如果不起作用!我相信您已经完成了以下步骤:

import subprocess
subprocess.call(['java', '-jar', 'Blender.jar'])

比如,如果你有一个正确配置的jar路径,那么可以直接运行jar。

其次,看cwd参数(用于可执行)。将 cwd 参数包含为 x

def run_command(command, **x):
    with subprocess.Popen(command,...., **x) as p:

对于run_command,指定工作目录的路径(可能应该是)或完整的系统路径。我不确定,两个都试试。

用于run_command(r'java -jar jarfilepath', cwd=r'workingdirpath', universal_newlines=True):中的输出线

print(outputline, end='')

或者,您可以尝试从您希望存储输出文件的目录运行命令。尝试:将 popen 运行为

subprocess.Popen(r'directory of running command', cwd=r'workingdir')

workingdir 可能是您当前的目录路径。

如果它不起作用,请尝试不使用r'。如果仍然不起作用,请尝试在路径中添加双斜杠,例如 (C:\\ abc\\def)

【讨论】:

  • 是的,我使用 subprocess 模块。如果我尝试使用上面的任何额外命令,似乎 jar 文件正在尝试使用它们,因为它会引发错误,例如“无法识别的命令 - 拼写错误或大小写错误?:cwd=/my/path” -有和没有r'。然后它指向我自己的帮助。我开始认为输出路径是在 .jar 中指定的某处,必须在那里更改。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2015-06-13
  • 2012-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多