2015-11-13 80 views
0

我正在使用.jar文件,但unfortunatley作为黑盒子,即我不知道里面究竟是什么,也不知道它是如何工作的。使用命令行控制java 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/ 

这创造一个文件在我想要的位置,但它是简单地从终端的消息,称“手术成功执行“ - 分析结果文件与以前一样在相同的文件夹中创建。 我也尝试过%*>,但它抛出了一个错误。

作为一个糟糕的解决方法,我现在有一个功能,它追溯查找和移动所有新创建的文件(分析输出)到我想要的文件夹。

有没有办法通过命令行控制输出文件在的原始命令中?或者它是在我的jar文件中的某处指定的东西?我的问题是不允许编辑它。

+0

当您从另一个工作目录中调用具有绝对路径的jar时会发生什么?你反编译了这个jar吗?也许它支持命令行参数或包含可以轻松从您自己的Java代码调用的类。 – Marged

+0

如果我使用绝对路径从不同的目录调用它,该文件仍然是在jar文件本身的位置创建的。我发现我可以在jar文件上运行-help,这给了我一些其他选项(特定于黑盒魔术),但没有指示输出文件。 –

回答

0

我是新来的蟒蛇。但是,如果他们能为你工作,我可能会建议尝试几件事情。道歉我,如果不行的话!我相信,你已经做了以下的步骤:

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

一样,如果你有一个正确配置的jar路径,然后直接运行即可罐子。

其次,看看cwd参数(用于执行)。包括cwd PARAM为x

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

run_command或者指定的工作目录(可能应该是)或完整的系统路径的路径。我不确定,只是尝试两种。

为outputline在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

+0

是的,我使用子流程模块。如果我尝试使用上面的任何额外命令,看起来jar文件试图使用它们,因为它会抛出一个错误,例如说“无法识别的命令 - 错误的拼写或大小写::cwd =/my/path” - 有和没有'r''。然后它指向我自己的帮助。 我开始认为输出路径是在.jar某处指定的,必须在那里更改。 –