Небольшой вопрос о Perl
2484
6
Доброго времени суток всем!
Возникла небольшая проблема в приложении под windows. Привожу отдельно неработающий кусок:
use Tk;
$main = MainWindow -> new();
$main -> Button (-text => "ClustalW2", -command => \&Clust) -> pack();
MainLoop();
sub Clust()
{
system('cd путь_к_программе & cама_программа.exe');
}
Работает без проблем, если так:
Clust();
sub Clust()
{
system('cd путь_к_программе & cама_программа.exe');
}
В linux подобной проблемы не возникало и всё отлично работало
Может кто подсказать, в чём проблема?
Возникла небольшая проблема в приложении под windows. Привожу отдельно неработающий кусок:
use Tk;
$main = MainWindow -> new();
$main -> Button (-text => "ClustalW2", -command => \&Clust) -> pack();
MainLoop();
sub Clust()
{
system('cd путь_к_программе & cама_программа.exe');
}
Работает без проблем, если так:
Clust();
sub Clust()
{
system('cd путь_к_программе & cама_программа.exe');
}
В linux подобной проблемы не возникало и всё отлично работало
Может кто подсказать, в чём проблема?
Mad_Dollar
guru
Подумайте еще раз, что происходит при вызове system.
Намекаю, загружается шелл пользователя, и ему передается строка команды для выполнения. Шелл cmd и bash/sh - разный шелл ))) Cmd может не понять конструкцию вида cd ../aa && ./aa.exe =)
Намекаю, загружается шелл пользователя, и ему передается строка команды для выполнения. Шелл cmd и bash/sh - разный шелл ))) Cmd может не понять конструкцию вида cd ../aa && ./aa.exe =)
alcedonia
junior
Дело в том, что конструкцию вида cd ../aa & ./aa.exe он как раз понимает и запускает, если её вызывает просто в программе.
А вот в виде
$main -> Button (-text => "ClustalW2", -command => \&Clust) -> pack();
не может запустить нужный а.exe (как понимаю, он его не находит)
даже если явно прописать
$main -> Button (-text => "ClustalW2", -command => sub{system('cd путь_к_программе & cама_программа.exe');}) -> pack();
Меняется только то, что я подключаю пользовательский интерфейс.
Не понимаю, почему не работает... может, perl другой скачать? о.О
А вот в виде
$main -> Button (-text => "ClustalW2", -command => \&Clust) -> pack();
не может запустить нужный а.exe (как понимаю, он его не находит)
даже если явно прописать
$main -> Button (-text => "ClustalW2", -command => sub{system('cd путь_к_программе & cама_программа.exe');}) -> pack();
Меняется только то, что я подключаю пользовательский интерфейс.
Не понимаю, почему не работает... может, perl другой скачать? о.О
Mad_Dollar
guru
Кстати да - что у вас за перл под виндовс?
Кстати, вот это , в частности пример использования button читали?
Посмотрите, ваша процедура-обработчик вообще вызывается? Попробуйте оттуда не просто делать system, а писать что-нибудь до вызова system и после в файл. может быть у вас обработчик вообще не вызывается, кстати.
Кстати, вот это , в частности пример использования button читали?
Посмотрите, ваша процедура-обработчик вообще вызывается? Попробуйте оттуда не просто делать system, а писать что-нибудь до вызова system и после в файл. может быть у вас обработчик вообще не вызывается, кстати.
alcedonia
junior
Сейчас стоит ActivePerl-5.8.8.819. Скачивается ActivePerl-5.10.1.1006
Пробовала сделать так:
sub Clust(){
$status=system('cd C:\Program Files\ClustalW2 & clustalw2.exe');
print $status;
}
возвращает 256 и что "ClustalW2" не является программой, а если просто
sub Clust(){
$status=system('cd C:\Program Files\ClustalW2');
print $status;
}
возвращает 0
Что самое непонятное, при вызове не из button - всё работает так, как нужно и возвращает 0 в обоих случаях.
Извиняюсь, конечно, за этот бред... ничего не понимаю) Сейчас ещё perl переставлю, может и заработает
Пробовала сделать так:
sub Clust(){
$status=system('cd C:\Program Files\ClustalW2 & clustalw2.exe');
print $status;
}
возвращает 256 и что "ClustalW2" не является программой, а если просто
sub Clust(){
$status=system('cd C:\Program Files\ClustalW2');
print $status;
}
возвращает 0
Что самое непонятное, при вызове не из button - всё работает так, как нужно и возвращает 0 в обоих случаях.
Извиняюсь, конечно, за этот бред... ничего не понимаю) Сейчас ещё perl переставлю, может и заработает
Спасибо, что откликнулисьПереустановила - всё заработало!
Mad_Dollar
guru
cd C:\Program Files\ClustalW2имя каталога у вас с пробелами. Экранируйте его, чтоли...
и почему не использовать:
chdir ("C:\Program Files\ClustalW2");
system("./clustalw2.exe");
зачем для смены рабочего каталога использовать system?