結論
src2absのファイルパスは相対パスで書きましょうという。例:./sample.java
困ったこと
src2absというプログラミング解析ツールをpythonのsubprocessから実行したがエラーが返ってくる。
コード
import subprocess
input_file_path = "0a880965_e08adf83_0_after.java"
cp = subprocess.run(["java", "-jar","src2abs-0.1-jar-with-dependencies.jar", "single","method",input_file_path,"test.java","idioms.csv"])
結果
Exception in thread "main" java.lang.NullPointerException
at java.nio.file.Files.provider(Files.java:97)
at java.nio.file.Files.readAttributes(Files.java:1737)
at java.nio.file.Files.isDirectory(Files.java:2192)
at edu.wm.cs.src2abs.AbstractorManager.checkParentFolderExists(AbstractorManager.java:121)
at edu.wm.cs.src2abs.AbstractorManager.checkInputs(AbstractorManager.java:117)
at edu.wm.cs.src2abs.AbstractorManager.abstractCode(AbstractorManager.java:20)
at edu.wm.cs.src2abs.main.AbstractorMain.abstractCode(AbstractorMain.java:48)
at edu.wm.cs.src2abs.main.AbstractorMain.main(AbstractorMain.java:25)
解決策
相対パスで書きましょう。
import subprocess
import sys
input_file_path = "./0a880965_e08adf83_0_after.java"
cp = subprocess.run(["java", "-jar","src2abs-0.1-jar-with-dependencies.jar", "single","method",input_file_path,"./test.java","./idioms.csv"])
そうするとうまく実行できました。
Source Code Abstracted successfully!
Abstracted Code: ./test.java
Mapping: ./test.java.map
終わりに
かなりニッチなケースですが情報がなかったので書きました。