Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl & System() & Java, Не удаётся выполнить команду 
:(
    Опции темы
DOKA
Дата 14.8.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Добрый день!

Столкнулся с непонятной проблемой.

print system("ls") - работает
print system("ls -la") - работает
print system("java") - работает
print system("java -v") - не работает - ошибка 256
print system("java -jar /var/www/reg/myJar.jar") - не работает - ошибка 512

А мне как раз нужны именно последняя команда. По сути необходимо запустить jar (с некоторыми параметрами) лежащий в той же дире, что и скрипт и выдать в виде странички.

Что за ошибки 256 и 512 perldoc -f system умалчивает :(

Может у кого-нибудь есть идеи?
PM MAIL   Вверх
dimes
Дата 14.8.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



perror 256
perror 512

что выдают?
Вообще то странные коды...

Цитата(DOKA @  14.8.2007,  15:20 Найти цитируемый пост)

print system("java -v") - не работает - ошибка 256
print system("java -jar /var/www/reg/myJar.jar") - не работает - ошибка 512

а если напрямую в шеле выполнить, выполняется без ошибки?



PM ICQ   Вверх
DOKA
Дата 14.8.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(dimes @ 14.8.2007,  15:27)
1)
perror 256
perror 512

что выдают?
Вообще то странные коды...



2)
а если напрямую в шеле выполнить, выполняется без ошибки?

1) Что за perror? Perldoc молчит, в шелле такой команды тоже нету...
2) Да, естественно, в шелле всё вышенаписаное выполняется отлично.
PM MAIL   Вверх
Nab
Дата 14.8.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



попробуйте так:

Код

print system("java", "-jar", "/var/www/reg/myJar.jar");


хотя если нужен результат то возможно так лучше будет

Код

print `java -jar /var/www/reg/myJar.jar`;




--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
arto
Дата 14.8.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



java в $PATH ?
PM MAIL ICQ   Вверх
DOKA
Дата 14.8.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(Nab @ 14.8.2007,  15:47)
попробуйте так:

Код

print system("java", "-jar", "/var/www/reg/myJar.jar");


хотя если нужен результат то возможно так лучше будет

Код

print `java -jar /var/www/reg/myJar.jar`;

Обы варианта не работают. :(

Добавлено @ 23:38
Цитата(arto @ 14.8.2007,  19:35)
java в $PATH ?

Да.
Код

doka:/home/doka# env | grep PATH; whereis java
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
java: /usr/bin/java /etc/java /usr/lib/java /usr/X11R6/bin/java /usr/bin/X11/java /usr/share/java /usr/share/man/man1/java.1.gz

К тому же просто system('java') отрабатывает.


Это сообщение отредактировал(а) DOKA - 14.8.2007, 23:38
PM MAIL   Вверх
Nab
Дата 14.8.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



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

print system('java', '-jar', '/var/www/reg/myJar.jar');


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
Rigel
Дата 15.8.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.7.2007
Где: Москва

Репутация: нет
Всего: нет



Цитата(DOKA @ 14.8.2007,  23:36)
Код

print `java -jar /var/www/reg/myJar.jar`;

Обы варианта не работают. :(
[/QUOTE]
Конечно не работают.  smile 
$respp = `java -jar /var/www/reg/myJar.jar`;
Это должно работать. У меня, во всяком случае, с параметрами так работет. И не надейтесь на пути по-умолчанию, вызывайте все с полным путем.
--------------------
С уважением. Rigel. http://www.smoliy.ru
PM MAIL WWW ICQ   Вверх
amg
Дата 15.8.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Rigel, даже любопытно стало, как 
Код

print `java -jar /var/www/reg/myJar.jar`;
и 
Код

$respp = `java -jar /var/www/reg/myJar.jar`;
print $respp;
могут дать различный результат при печати? (Если, конечно, не трогать $\ и т.п.).

PM MAIL   Вверх
dimes
Дата 15.8.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



если `` вернет массив то различия будут

Добавлено через 6 минут и 35 секунд
вот только на работоспособность это никак не влияет

DOKA, 
если вариант Nab не сработает, можно приступать к пляскам с бубном.
Впрочем можно по пребывать поиграться с путями (надеюсь ты скрипт в шеле дергаешь?)
Я не знаю как работает команда "java -jar /var/www/reg/myJar.jar" нужно ли там общаться в процессе установки?

PM ICQ   Вверх
Rigel
Дата 15.8.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.7.2007
Где: Москва

Репутация: нет
Всего: нет



Цитата(dimes @ 15.8.2007,  16:43)
Добавлено @ 16:50
вот только на работоспособность это никак не влияет

Абсолютные пути пропишите
--------------------
С уважением. Rigel. http://www.smoliy.ru
PM MAIL WWW ICQ   Вверх
amg
Дата 16.8.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(dimes @  15.8.2007,  16:43 Найти цитируемый пост)
если `` вернет массив то различия будут

dimes, я же специально оговорился: если не трогать $\ и т.п. (еще $, может влиять на результат). С этой оговоркой не представляю себе, какие могли бы быть различия.

По теме. Непонятно, почему так происходит. Я с подобным ни разу не сталкивался. Вызов с консоли и через system с несколькими аргументами всегда отрабатывали идентично. Что возвращает system? 

Rigel, правильно советует, лучше прописать на всякий случай абсолютный путь, причем на сам исполняемый файл (возможно, /usr/bin/java - это симлинк, на /usr/lib/java/bin/java например). И лучше пользоваться вызовом system с несколькими аргументами, как Nab советовал: тогда шелл не будет участвовать в вызове команды и всяких косяков меньше. 
PM MAIL   Вверх
dimes
Дата 16.8.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Цитата(amg @  16.8.2007,  09:05 Найти цитируемый пост)
dimes, я же специально оговорился: если не трогать $\ и т.п.


Код

my @_arr=(1,2,3,4,5);
print @_arr,"\n";
my $_v=@_arr;
print $_v;

PM ICQ   Вверх
DOKA
Дата 17.8.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Пробовал указывать реальный путь к java - /usr/lib/jvm/java-1.5.0-sun... - ошибка 512
Пробовал делать my $out = system $cmd; print $out; - ошибка 512
Пробовал передавать в system массив - ошибка 512
:(

В принципе проблему частично решил модифицировав .jar в .war (сервлет) и запустив его под Apache Tomcat, но странно почему perl не может нормально вызывать jar'.

PM MAIL   Вверх
tishaishii
Дата 22.8.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Ему до расширения и самого файла дела нету. И до командной строки тоже ему дела нету.
Ты думаешь, что perl парсит команду в кавычках и потом её сам выполняет. Тогда вместе с Perl ещё и java и ls должны поставляться. И вообще отдельная PerlOS и железо.smile)))
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.