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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> завершение команды system 
:(
    Опции темы
gcc
Дата 16.10.2008, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



есть скрипт с несколькими командами system

можно ли узанть как завершилась какая-то команда, "0" (не вреное) или "1" (верно)? прологировать, если ошибка

я думал это просто if ($system > 0) { print "ok";} else { >> error.txt;}


остановился на том чтобы весь вывод логировать , еще exec должна возвратить ЛОЖЬ, если команда не существет

Это сообщение отредактировал(а) gcc - 16.10.2008, 19:27
PM WWW ICQ Skype GTalk Jabber   Вверх
amg
Дата 16.10.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



system возвращает "exit status" исполняемой программы, и, вообще говоря, он может быть любым, в зависимости от программы. Но в первом приближении
$system == 0  OK
$system > 0 Error
$system == -1 Not found (см. $!)

Также может оказаться полезным перехватить output программы и проанализировать его.


Сейчас заглянул в документацию по system -- там, оказывается, все описано, и даже есть кусок кода, осмысленно анализирующий результат работы этой команды. Нужно было всего лишь заглянуть в документацию...

Это сообщение отредактировал(а) amg - 16.10.2008, 11:13
PM MAIL   Вверх
gcc
Дата 16.10.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



там не написано было, я подумал что она возращает рузультат...
как возвратить результат в переменную?
Код

my $host = system("pw usershow host"); print $host;

вывод равняется "0", не могу найти как сделать чтобы вернуть в переменную...  smile 

Это сообщение отредактировал(а) gcc - 16.10.2008, 16:28
PM WWW ICQ Skype GTalk Jabber   Вверх
shamber
Дата 16.10.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(gcc @  16.10.2008,  16:25 Найти цитируемый пост)
сделать чтобы вернуть в переменную

перехватить output программы
PM MAIL Jabber   Вверх
gcc
Дата 16.10.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Код

open(FILE, "/bin/ls |")


забыл что в open есть такая опция |

Это сообщение отредактировал(а) gcc - 16.10.2008, 18:15
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 26.6.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



нужно сделать например: cd /usr/ports/www/www/ && make install 

open не выполняет это, наверное потому что стоит логическое И

system возвращает всегда '0' в любом слачае

какие варианты еще отследить вывод программы?
PM WWW ICQ Skype GTalk Jabber   Вверх
amg
Дата 27.6.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(gcc @  26.6.2009,  00:00 Найти цитируемый пост)
нужно сделать например: cd /usr/ports/www/www/ && make install
open не выполняет это, наверное потому что стоит логическое И
В варианте open с двумя аргументами (т.е. через шелл) все должно работать. С трехаргументным open, конечно, не будет.
Код
open OUTPUT, "cd /usr/ports/www/www/ && make install |" or die; # Должно работать.
print while <OUTPUT>
close OUTPUT;


Еще вариант -- через обратные кавычки, но при этом придется дожидаться, пока команда не закончит работу.
Код
@output = `cd /usr/ports/www/www/ && make install`;



Это сообщение отредактировал(а) amg - 27.6.2009, 14:42
PM MAIL   Вверх
korob2001
Дата 29.6.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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




Модератор: Тема закрыта. Одина тема - один вопрос.

gcc, последний пост удалил, из-за большого кол-ва ошибок, мне не удалось понять даже суть вопроса. Создайте отдельную тему и сформулируйте более чётко свой вопрос.



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


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

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


 




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


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

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