Я запускал сценарий Octave через классы ProcessBuilder и Process в Java. Я использовал Netbeans, и файл сценария находится в папке ресурсов проекта, который я делаю.Скрипт октавы через Netbeans 8.2 (Java Project) не создает файлы (редактирование: не работает вообще)
При запуске из 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);
Последние две строки, кажется, не бежать от Netbeans; нет выхода (т. е. не создается выходной файл).
Код Java, который используется для запуска этого скрипта.
ProcessBuilder pb = new ProcessBuilder("src/resources/ProcessImg.m");
try{
Process p = pb.start();
}
catch(IOException ex){
ex.printStackTrace();
}
- Edit:
Я просто попытался imshow(img)
между вышеприведенным кодом. Это тоже не сработало.
Edit:
Как проверить, что 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
, выход
/home/user/NetBeansProjects/Project
Если command
строка ls
, выход
Я хочу сказать, что команды выполняются.
Кроме того, строитель процессов идентифицирует обозначения shebang.
Проблема заключается в 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 дает мне результат. –