Как захватить и отобразить вывод из задачи через Windows CMD - PullRequest
1 голос
/ 10 ноября 2008

У меня есть PHP-скрипт, который я запускаю из командной строки (windows), который выполняет множество задач, и единственный вывод, который он выдает, - это операторы «print», которые выводят прямо на экран.

Что я хочу сделать, так это записать это в файл журнала.

Я знаю, что могу сделать:

php-cli script.php > log.txt  

Но проблема этого подхода заключается в том, что весь вывод записывается в файл журнала, но я не могу видеть, как все это работает в это время (поэтому я могу остановить процесс, если что-то хитрое происходит).

Просто чтобы предупредить другие возможные вопросы, я не могу поменять все распечатки на оператор журнала, поскольку их слишком много, и я бы не стал ничего менять в коде, чтобы меня не обвиняли в том, что что-то происходит FUBAR. Кроме того, есть недостаток времени. Я также должен запустить это на машине с Windows.

Заранее спасибо:)

Редактировать: Спасибо за ответы, ребята, в конце концов, я выбрал метод браузера, потому что его было проще и быстрее настроить, хотя я уверен, что где-то есть реальный ответ на эту проблему.

Ответы [ 4 ]

3 голосов
/ 10 ноября 2008

Вы можете создать сценарий powershell, который запускает команду, считывает данные из STDOUT команды, а затем выводит вывод в файл журнала и на терминал для просмотра. Вы можете использовать команды Write-Output и Write-Host.

Сайт Microsoft: http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/tee-object.mspx

Другим вариантом будет использование программы «найти тройник», которая будет считывать ввод и перенаправлять его на два разных выхода. Мне кажется, я видел их для окон, но не думаю, что они стандартные.

Википедия: http://en.wikipedia.org/wiki/Tee_(command)

1 голос
/ 05 декабря 2008

Вы хотите команду "tee" для Windows. Смотри http://en.wikipedia.org/wiki/Tee_(command)

Powershell включает команду tee, а также доступно множество версий tee для Windows, например:

Также может быть реализован в VBScript , если вы предпочитаете.

РЕДАКТИРОВАТЬ : Только что пришло мне в голову, я должен также упомянуть команду tail: http://en.wikipedia.org/wiki/Tail_(Unix). Tail позволяет читать последние N строк файла, а также включает режим «файловый монитор», который просто непрерывно отображает конец файла в режиме реального времени. Это идеально подходит для мониторинга файлов журнала, поскольку позволяет просматривать журнал в режиме реального времени, не вмешиваясь в процесс записи в журнал. Существует несколько реализаций tail для Windows, как на основе командной строки, так и на основе графического интерфейса. Службы Microsoft для пакетов UNIX (или как они там сейчас называют) также включают версию tail. Некоторые примеры:

Некоторые из них выходят далеко за рамки простого отображения файла в режиме реального времени по мере его обновления и могут отправлять оповещения по электронной почте и отображать совпадения строк, контролировать несколько файлов одновременно и т. Д.

1 голос
/ 10 ноября 2008

Я всегда открывал файл журнала в своем веб-браузере. Это позволяет мне легко обновлять его и не прерывать любую запись в файл, который делает Windows. Это не особенно элегантно, но работает!

0 голосов
/ 10 ноября 2008

Slow:

for /f "delims=" %a in ('php-cli script.php') do @echo %a&echo %a>>log.txt

или в пакетном файле:

for /f "delims=" %%a in ('php-cli script.php') do @echo %%a&echo %%a>>log.txt
...