Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > завершение команды system


Автор: gcc 16.10.2008, 08:26
есть скрипт с несколькими командами system

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

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


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

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

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


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

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

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

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

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

перехватить output программы

Автор: gcc 16.10.2008, 18:14
Код

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


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

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

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

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

какие варианты еще отследить вывод программы?

Автор: amg 27.6.2009, 14:38
Цитата(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`;


Автор: korob2001 29.6.2009, 10:16

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)