Perl-скрипт не полностью выполняется при вызове из Java-программы - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь выполнить свой Perl-скрипт из Java-программы.Я уже установил Perl на свой компьютер.Ниже приведен мой пример Perl-файла (test.pl).

#!/usr/bin/perl -w
use 5.010;
use strict;
use warnings;

use Path::Tiny;
use autodie;

my $dir = path("E:/perl/scripts"); 
my $file = $dir->child("file.txt"); 
my $file_handle = $file->openw_utf8();

my @list=('a', 'list', 'of', 'lines');
push @list,<*.doc>;
push @list,<*.pdf>;
push @list,<*.jpg>;
push @list,<*.pl>;
print "Value of list = @list \n";

И это мой Java-код для выполнения сценария Perl.

Process process;

    try {
        process = Runtime.getRuntime().exec("cmd /c perl E:\\perl\\PerlCallbyServlet\\test.pl");
        //process = Runtime.getRuntime().exec("perl E:\\perl\\PerlCallbyServlet\\test.pl");
        process.waitFor();
        if (process.exitValue() == 0) {
            System.out.println("Command Successful");
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = null;
                while ((line = in.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Command Failure");
        }
    } catch (Exception e) {
        System.out.println("Exception: " + e.toString());
    }

Теперь сначала, когда я пытаюсь запустить этотКласс Java, который я получаю ниже вывода.

Command Successful
Value of list = a list of lines 

Но когда я запускаю этот скрипт из командной строки, используя команду

perl test.pl

Мой вывод такой, как показано ниже:

Value of list = a list of lines one.doc test.pl photo.jpg

Таким образом, я не получаю такой же вывод скрипта Perl, выполняемого из Java-программы, как из командной строки.

1 Ответ

0 голосов
/ 29 ноября 2018

Ваш Perl-скрипт не устанавливает рабочий каталог.Я предполагаю, что вы хотите добавить содержимое каталога E:/perl/scripts в @list.Попробуйте добавить в сценарий Perl:

chdir('E:/perl/scripts');

Извините, я не использую Windows, поэтому не могу проверить, является ли это правильный путь в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...