12°C
завтра: 5°C
Погода в Перми
12°C
вечером9°C
ночью4°C
завтра5°C
Подробно
 63,79
+0.0046
Курс USD ЦБ РФна 24 апреля
63,7906
+0.0046
 71,75
+0.0243
Курс EUR ЦБ РФна 24 апреля
71,7453
+0.0243
  • junior

    Сообщений: 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 подобной проблемы не возникало и всё отлично работало :а\?:
    Может кто подсказать, в чём проблема?

  • guru

    Сообщений: 4281

    Подумайте еще раз, что происходит при вызове system.
    Намекаю, загружается шелл пользователя, и ему передается строка команды для выполнения. Шелл cmd и bash/sh - разный шелл ))) Cmd может не понять конструкцию вида cd ../aa && ./aa.exe =)

    Non solum oportet, sed etiam necessese est

  • junior

    Сообщений: 6

    Дело в том, что конструкцию вида cd ../aa & ./aa.exe он как раз понимает и запускает, если её вызывает просто в программе.
    А вот в виде
    $main -> Button (-text => "ClustalW2", -command => \&Clust) -> pack();
    не может запустить нужный а.exe (как понимаю, он его не находит)
    даже если явно прописать
    $main -> Button (-text => "ClustalW2", -command => sub{system('cd путь_к_программе & cама_программа.exe');}) -> pack();
    Меняется только то, что я подключаю пользовательский интерфейс. :а\?:
    Не понимаю, почему не работает... может, perl другой скачать? о.О

  • guru

    Сообщений: 4281

    Кстати да - что у вас за перл под виндовс?
    Кстати, вот это , в частности пример использования button читали?
    Посмотрите, ваша процедура-обработчик вообще вызывается? Попробуйте оттуда не просто делать system, а писать что-нибудь до вызова system и после в файл. может быть у вас обработчик вообще не вызывается, кстати.

    Non solum oportet, sed etiam necessese est

  • junior

    Сообщений: 6

    Сейчас стоит 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 переставлю, может и заработает:улыб:

  • junior

    Сообщений: 6

    Спасибо, что откликнулись:улыб:Переустановила - всё заработало!

  • guru

    Сообщений: 4281

    В ответ на: cd C:\Program Files\ClustalW2
    имя каталога у вас с пробелами. Экранируйте его, чтоли...
    и почему не использовать:
    chdir ("C:\Program Files\ClustalW2");
    system("./clustalw2.exe");
    зачем для смены рабочего каталога использовать system?

    Non solum oportet, sed etiam necessese est

Записей на странице:

Перейти в форум

Модератор: