2015-11-13 62 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某處指定的,必須在那裏更改。 –

相關問題