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

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

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


Демо проект

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

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

5/5 - (3 голоса)

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

  1. А если мне нужно в писать в один и тотже процесс
    Сначало запускаю
    sudo nano …
    Потом вписуваю
    pass111

  2. 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, не значит, что указана неверная кодировка.

  3. jkeks:

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

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

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

  4. Андрей:

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

  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’);