Как запустить Java ProcessBuilder с помощью «Pipe» для второго exe-файла?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как запустить Java ProcessBuilder с помощью «Pipe» для второго exe-файла?

Сообщение Anonymous »

Если я запустил эту команду:
raster2pgsql.exe -I -C -s 4326 -t 256x256 -l 4,16 C:\raster\sthlm .tif public.stockholm | psql -U postgresuser -d rasterdata -h localhost -p 5432
в интерфейсе командной строки Windows команда выполняется нормально. Растровый файл импортируется в базу данных PostgreSQL "rasterdata".
Но я не могу заставить его работать с Java ProcessBuilder. В приведенной выше команде есть два exe-файла (raster2pgsql.exe и psql.exe), и я не знаю, как определить команду для ProcessBuilder с двумя exe-файлами.
синтаксис для двух программ:
RASTER2PGSQL:
-s использует srid 4326
-Я создаю пространственный индекс
-C использую стандартные растровые ограничения
-t разбиваю выходные данные на плитки 256x256
Входной файл sthlm.tif
-t расположить выходные данные плиткой 256x256*
public.stockholm загрузить в эту таблицуraster2pgsql -s 4326 -I -C -t 256x256 sthlm.tif public.stockholm > elev.sql
PSQL:
-d подключиться к этой базе данных
-u пользователь базы данных
-h хост
-p порт
-f прочитать этот файл после подключения (вывод SQL из raster2pgsql)
psql -u postgres -d rasterdata -h localhost -p 5432 -f elev.sql
Я не хочу запускать программы отдельно (сначала сохраняя преобразует растровые данные на диске (elev.sql), а затем вставляет данные из elev.sql в базу данных. Следовательно, я хотел бы передать psql в raster2pgsql, как Postgis, как показывает PostGIS (https://postgis.net/docs/using_raster_d ... ter_Loader):
"Можно выполнить преобразование и загрузку. все за один шаг с использованием каналов UNIX:
raster2pgsql -s 4326 -I -C -M .tif -F -t 100x100 public.demelevation | psql -d gisdb"
< /em>
Это пример вывода, когда я запускаю свой код с помощью raster2pgsql | psql:
ВСТАВИТЬ В "public"."stockholm | psql -u postgresuser -d rasterdata -h localhost 5432" ("rast") ЗНАЧЕНИЯ ('01000...
и т.д..
похоже, что выполняется только raster2pgsql
мой код:
ArrayList cmd = new ArrayList();
cmd.add("raster2pgsql.exe");
cmd.add("-I");
cmd.add("-C");
cmd.add("-s");
cmd.add("4326");
cmd.add("-t");
cmd.add("256x256");
cmd.add("-l");
cmd.add("4,16");
cmd.add(c:\raster\sthlm.tif");
cmd.add("public.stockholm | psql -U postgresuser -d rasterdata -h localhost -p 5432);
ProcessBuilder b = MainDialog.gdalProcess; //pre created
b.command(cmd);
Process p=null;
try {
p = b.start();
} catch (IOException e) {
e.printStackTrace();
}
try (InputStream processOutput = p.getInputStream()) {
BufferedReader bufIn = new BufferedReader(new InputStreamReader(processOutput));
String str1 = null;
while ((str1 = bufIn.readLine()) != null) {
System.out.println(str1 + "\n");
}
bufIn.close();
} catch (IOException e) {
e.printStackTrace();
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... d-exe-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»