JavaのProcessBuilderとProcessクラスでOctaveスクリプトを実行しました。私はNetbeansを使用して、スクリプトファイルは私がやっているプロジェクトのリソースフォルダにあります。Netbeans 8.2(Java Project)で実行されているOctaveスクリプトがファイルを作成していません(編集:全く実行していません)
bashから直接実行すると、スクリプトは正常に動作しています。 Javaから実行すると、スクリプトが正常に動作していることを確認できます。以下のプログラムで
、
#!/usr/bin/octave -qf
function ret = manipulateCell(x)
x = x/max(x(:));
x = x.*255;
x = int32(x);
a1 = mean(x(:));
ret = a1<70;
end
img = imread('aaa.png');
imgInd = rgb2ind(img);
imgGray = ind2gray(imgInd,colormap());
sizeVector = 100*ones(1,20);
Cells = mat2cell(imgGray,sizeVector,sizeVector);
ManipCells = cellfun(@manipulateCell,Cells);
file2D = fopen('data.txt','rw+');
dlmwrite(file2D,ManipCells);
最後の2行は、NetBeansから実行していないように見えます。出力がない(すなわち、出力ファイルが作成されない)。
このスクリプトを実行するために使用されるJavaコード。
ProcessBuilder pb = new ProcessBuilder("src/resources/ProcessImg.m");
try{
Process p = pb.start();
}
catch(IOException ex){
ex.printStackTrace();
}
- 編集:
私は上記のコードの間でimshow(img)
を試してみました。それはどちらもうまくいかなかった。
編集:私はそのProcessBuilderをとプロセスの作業の罰金を検証する方法
?そしてどのように私は私が午前どのディレクトリを知っています。
String command = "pwd";
ProcessBuilder pb = new ProcessBuilder(command);
//pb.directory(new File("./"));
try{
Process p = pb.start();
//Debug Code
pb.redirectErrorStream(true);
BufferedReader bf = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
while((s=bf.readLine())!=null){
System.out.println(s);
}
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
}
catch(IOException ex){
ex.printStackTrace();
}
command
文字列がpwd
ある場合command
文字列がls
の場合、出力は、出力が
/home/user/NetBeansProjects/Project
です
コマンドが実行されているとします。
また、プロセスビルダーはシバン表記を識別しています。
問題点は、NetBeansではProcessImg.mがおそらく外部プロセスによってファイルをディレクトリに作成することができないということです。
#!/usr/bin/octave -qf
function ret = manipulateCell(x)
x = x/max(x(:));
x = x.*255;
x = int32(x);
a1 = mean(x(:));
ret = a1<70;
end
img = imread('~/Desktop/aaa.png');
imgInd = rgb2ind(img);
imgGray = ind2gray(imgInd,colormap());
sizeVector = 100*ones(1,20);
Cells = mat2cell(imgGray,sizeVector,sizeVector);
ManipCells = cellfun(@manipulateCell,Cells);
file2D = fopen('~/Desktop/data.txt','rw+');
dlmwrite(file2D,ManipCells);
示唆したように私は(自宅から)絶対パスを入れている、それが動作しませんでした。 NetBeansだけでなく、ファイルも作成されていませんでした。
完全なMCVEを入力してください。上記のコードからは、例えばfcloseが見つからない... – Andy
単に 'data.txt'ではなく*フルファイルパス*を指定しようとしましたか? – Suever
@Andy fcloseは提供していませんが、bashからスクリプトを実行すると出力が得られます。 –