DevelNext — Запуск внешнего процесса

В DevelNext есть возможность запускать сторонние процессы и получать от них данные из потоков stdout и stderr.

Вывод в консоль


Демо проект

Скачать "demo-cli.dnproject" Загрузок: 313

Если нужно по-быстрому получить результат выполнения команды, подойдёт следующий код

Добавить комментарий

  1. Anton:

    Кодировка неверная указана, нужно использовать ‘Windows-1251’.
    Обнаружился глюк в devNext: метод readFully не отображается в подсказках.
    Альтернативный вариант:
    $process = execute(‘php -r «print_r(\’абв\’);»‘, true);
    $result = $process->getInput()->readFully();
    var_dump(str::decode($result, ‘Windows-1251’)); // string(3) «абв»

    • TsSaltan:

      Командная строка по умолчанию работает в кодировке CP866. Некоторые команды возвращают ответ в «своей» кодировке,будь то windows-1251, utf-8 и т.д. Если php настроен на кодировку windows-1251, не значит, что указана неверная кодировка.

  2. jkeks:

    Короче нифига не работает этот код:

    $result = (new Process([‘cmd.exe’, ‘/c dir’]))->start()->getInput()->readFully();
    pre($result);

    НЕ РАБОТАЕТ DevelNext 16.7 и.. ?

  3. Андрей:

    Как правильно работать с консольными утилитами, типо mysql? Из этого примера получается, что запускается процесс, выполняется команда и всё. В случае с консолью mysql, то посылается команда, например что бы войти «mysql -ulogin -ppassword», после входа как-то надо отправлять команды дальше, уже внутри mysql, как я понимаю, не завершая процесс. Как в этом случае поступить?

  4. Аноним:

    Как запустить процесс Diskpart в том же окне? При попытке запустить через DN, Diskpart открывается в новом окне… (очень нужно!)

  5. Аноним:

    Почему не работает?:
    $biosnum = (new Process([‘cmd.exe’, ‘/c «wmic bios get serialnumber»‘]))->start()->getInput()->readFully();

  6. Извращуга:

    А разве так работать не будет?)

    $result = str::decode((new Process([‘cmd.exe’, ‘/c ping google.com -n 1’]))->start()->getInput()->readFully(), ‘cp866’);