Реклама на сайте Advertise with us

Perl: Переменные окружения при вызове system()

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 09.03.06
Сообщения: 772
Рейтинг: 143

Ссылка на сообщениеДобавлено: 29/04/06 в 13:14       Ответить с цитатойцитата 

Есть утилита, например, proga. При запуске её из shell "proga -a -b -c ..." она работает правильно и не ругается.

При запуске её из CGI-скрипта на Perl
$q="proga -a -b -c ...";
system($q);
утилита не находит какую-то там свою домашнюю директорию. Если я перед вызовом прописываю $ENV{HOME}='....', то домашнюю директорию она находит, но клинится на чём-то другом.

Отсюда я делаю вывод, что нужно перед вызовом system() установить все переменные окружения, которые установлены при вызове программы из shell.
Как это сделать???

CGI-скрипт запускается тем же пользователем, что и shell.

0
 



С нами с 18.01.06
Сообщения: 322
Рейтинг: 487

Ссылка на сообщениеДобавлено: 29/04/06 в 13:21       Ответить с цитатойцитата 

Попробуй использовать функцию passthru вместо system, она выводит результат выполнения, если произходит ошибка, то сможешь узнать что за ошибка проиходит...

0
 



С нами с 09.03.06
Сообщения: 772
Рейтинг: 143

Ссылка на сообщениеДобавлено: 29/04/06 в 13:36       Ответить с цитатойцитата 

Я знаю, что за ошибки происходят. Это видно по логам. В принципе можно установить все переменные, из-за которых происходят ошибки, и всё будет работать. Но это какой-то кривой способ. Хочется научиться восстанавливать ВСЁ окружение. Чтобы вызов из CGI-скрипта был тождествен вызову из shell.

0
 



С нами с 18.01.06
Сообщения: 322
Рейтинг: 487

Ссылка на сообщениеДобавлено: 29/04/06 в 13:52       Ответить с цитатойцитата 

kbot писал:
Есть утилита, например, proga. При запуске её из shell "proga -a -b -c ..." она работает правильно и не ругается.
При запуске её из CGI-скрипта на Perl
$q="proga -a -b -c ...";
system($q);
утилита не находит какую-то там свою домашнюю директорию.

А что если изначально прописать полный путь к утилите, т.е.
$q ="/path_to_proga/proga -a -b -c";
system($q);

0
 



С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462

Ссылка на сообщениеДобавлено: 29/04/06 в 14:36       Ответить с цитатойцитата 

делай так:
$q="HOME=/home/blabla/каталог proga -a -b -c ...";

Sutra - лучшая система управления трафом

0
 

старый зануда

С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361

Ссылка на сообщениеДобавлено: 29/04/06 в 16:48       Ответить с цитатойцитата 

kbot писал:
...Отсюда я делаю вывод, что нужно перед вызовом system() установить все переменные окружения, которые установлены при вызове программы из shell...
Ты делаешь неправильный вывод - переменные окружения httpd никакого отношения ни к шеллу, ни к системе не имеют. Дело в том, что если ты запускаешь скрипт через cgi то он считается запущенным веб-сервером, каковой работает из под пользователя ("apache" или "nobody"), не имеющего домашнего каталога в системе (кто не верит может почитать "/etc/passwd"), т.к. главное не кто владелец файла, а кто его запустил. Поэтому если не будет прописан полный путь к файлу от корня, ничего работать не будет...

Всё для Iphone & Ipad

0
 

старый зануда

С нами с 26.07.03
Сообщения: 3291
Рейтинг: 1361

Ссылка на сообщениеДобавлено: 29/04/06 в 17:59       Ответить с цитатойцитата 

А если точнее, то по идее, эту прогу нужно запускать так:
Код:
$q="cd /домашний/каталог/этой/проги; proga -a -b -c ...";
system($q);

Всё для Iphone & Ipad

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »