shp2pgsql, команда psql не найдена через ProcessBuilder Java - PullRequest
0 голосов
/ 12 сентября 2018

Следующая команда хорошо работает в командной строке

shp2pgsql -s 4326 /Users/abc.shp | psql -U user1 -h localhost -p 5432 -d postgis

Однако, когда я запускаю следующую команду в Java с использованием ProcessBuilder, она говорит, что команда не найдена.Вот код:

 public static void main(String arg[]) throws Exception {

    ProcessBuilder pb =
                   new ProcessBuilder("/bin/sh -c shp2pgsql /Users/abc.shp | psql -U user1 -h localhost -p 5432 -d postgis");
    Process p = pb.start();
    showOutput(p.getInputStream(), System.out);
    showOutput(p.getErrorStream(), System.err);

}

private static void showOutput(final InputStream src, final PrintStream dest) {
    new Thread(new Runnable() {
        public void run() {
            Scanner sc = new Scanner(src);
            while (sc.hasNextLine()) {
                dest.println(sc.nextLine());
            }
        }
    }).start();
 }

1 Ответ

0 голосов
/ 12 сентября 2018

Кажется, что Java не понимает, где путь вашей среды (psql или shp2pgsql ..) равен

Вам необходимо указать путь, чтобы он мог выполняться.Обычно это в /usr/local/bin или usr/bin.Также обратите внимание, что аргумент для "/bin/sh и "-c" (это указывает, что команда, которую вы собираетесь выполнить, представлена ​​в строковом формате), является отдельной.Просто измените следующий фрагмент.Это должно работать !!

String env = "/usr/local/bin/";
ProcessBuilder pb =
                   new ProcessBuilder("/bin/sh", "-c", env +"shp2pgsql /Users/abc.shp | "+env+"psql -U user1 -h localhost -p 5432 -d postgis");
    Process p = pb.start();
...