Что такое код mcal_popen

Кодировка stdout при работе с subprocess.Popen

И все бы ничего, только «кодировка сломалась«, а как починить, не знаю.
Help me please

Добавлено через 1 час 57 минут
Покопал я значит сам Гуглы, по запускал разные варианты кода и выяснил, что мои бараны начинаются с IOBase. А уже где-то на уровне TextIOWrapper ударяются в воротаОКНА.
Да, когда я конструктору Popen скармливаю параметр universal_newlines=True, то возвращает он мне по вызову stdout экземпляр TextIOWrapper (ну а иначе как мне с трубой работать). А знаете, что это значит? — Оказывается, это значит (ну как я понял), что интерпретатор берет строку байт и декодирует ее автоматом под локаль системную. А еще это значит, что если параметр universal_newlines сделать False, то вернет интерпретатор мне IOBufferedReader, над которым потом Wraper и наворачивается. Так, а почему бы собственно не попробовать тогда сделать это вручную. Пробую, и опять мажу:

Получаю от-такой вывод:

Traceback (most recent call last):
File «D:/ProgrammingNI/workingDir/DaCIdA/checks_2.py», line 9, in
s = my_out.readline()
File «C:\Program Files\Anaconda3\lib\codecs.py», line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x88 in position 2: invalid start byte

Стоит мне поставить ручками ту же кодировку, что ставит интрепретатор автоматом, при использование параметра universal_newlines=True:

как тут-же возвращаюсь к все той-жу кракозябре:

‚лў®¤Ё¬®Ґ_Ё¬п: Adobe Acrobat Update Service

’ЁЇ : 10 WIN32_OWN_PROCESS

‘®бв®п*ЁҐ : 4 RUNNING

(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
.
Ну плизики, NEED YOUR HELP

Добавлено через 50 минут
Парни, помогите, трахаюсь с кодировкой черт знает сколько. Вчера setlocale пробовал, и encode, и чот ваще не, потом вот, то что выше писал. Гугл внятного ответа не дает (ну либо я криворукий).

Что такое код mcal_popen

(PHP 3>= 3.0.13, PHP 4 )

mcal_popen — Opens up a persistent MCAL connection

Description int mcal_popen ( string calendar, string username, string password [, int options])

Returns an MCAL stream on success, FALSE on error.

mcal_popen() opens up an MCAL connection to the specified calendar store. If the optional options is specified, passes the options to that mailbox also. The streams internal event structure is also initialized upon connection.

Что такое код mcal_popen

(PHP 3 >= 3.0.13, PHP 4, PECL)

mcal_popen — Opens up a persistent MCAL connection

Description int mcal_popen ( string calendar, string username, string password [, int options] )

Returns an MCAL stream on success, FALSE on error.

mcal_popen() opens up an MCAL connection to the specified calendar store. If the optional options is specified, passes the options to that mailbox also. The streams internal event structure is also initialized upon connection.

Что такое код mcal_popen

16 просмотра

1 ответ

6 Репутация автора

Я использовал это для получения списка ips из журнала. Он ищет шаблон в части журнала между st_time и en_time. Теперь это устарело? Итак, как преобразовать это в подпроцесс. Я нахожу os.popen проще. Может ли кто-нибудь сказать эквивалентный код подпроцесса

Ответы (1)

плюса

87120 Репутация автора

subpocess Код будет примерно эквивалентен.

Однако вы можете легко заменить его собственным кодом Python.

В output этом случае это список. Каждая захваченная линия все еще содержит свою завершающую новую строку. (Легко исправить, если это не то, что вы хотите, конечно.)

Это также должно быть легко адаптировать к сценарию, где st_time не происходит точно в файле журнала. Вам нужно будет разобрать отметку времени в каждой строке, а затем просто начать обработку, когда маркер даты синтаксического анализа равен или больше (разобранное) st_time значение.

Что такое код mcal_popen

(PHP 3>= 3.0.13, PHP 4 >= 4.0.0)

mcal_popen — Opens up a persistent MCAL connection

Description

int mcal_popen (string calendar, string username, string password [, int options])

Returns an MCAL stream on success, FALSE on error.

mcal_popen() opens up an MCAL connection to the specified calendar store. If the optional options is specified, passes the options to that mailbox also. The streams internal event structure is also initialized upon connection.

Как работает popen() и как его реализовать в коде c++ на Linux?

У меня возникли проблемы с выяснением того, как использовать popen() для захвата stdout из дочерних программ в Linux в основную программу C++. Я оглядывался и нашел этот фрагмент кода, который делает то, что я хочу, чтобы он делал. Но я не могу понять, как это работает. Я знаю основы программирования C++ (я делаю это уже несколько месяцев), но я в тупике, может ли кто-нибудь помочь мне с объяснением этого?

как использовать popen() для захвата stdout из дочерних программ в Linux в основную программу C++

Вы знакомы с философией UNIX? Вы можете прочитать начало статьи в Википедии «Философия UNIX». Вот фрагмент:

Философия UNIX документирована Дугом Макилрой [1] в Техническом журнале Bell System от 1978 года: [2]

1) Сделайте каждую программу хорошо. Чтобы выполнить новую работу, создайте новую, а не усложняйте старые программы, добавив новые «функции».

2) Ожидайте, что выход каждой программы станет входом другой, пока неизвестной, программой. Не мешайте выводам с посторонней информацией. Избегайте жестких столбчатых или двоичных форматов ввода. Не настаивайте на интерактивном вводе.

Я предпочитаю использовать popen для доступа ко многим инструментам Linux, которые я нахожу полезными. Примеры включают sort, unique и sha256sum и несколько других. Но вы можете заметить, что многие эквиваленты перемещаются в библиотеки C++ (std :: sort и т.д.) И, с трудом, я нашел, например, код sha256sum, подходящий для компиляции в моем приложении C++.

Илон Маск рекомендует:  preg_replace_callback - Выполняет поиск по регулярному выражению и замену с использованием функции

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

2) При запуске в режиме «r» труба stdout sha256sum направляется в дескриптор FILE *, открытый вашим вызовом popen. Таким образом, выход «подается обратно» в вашу программу.

Но я не могу понять, как это работает.

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

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

В своем фрагменте вы пытаетесь выполнить команду «driftnet». Несчастливый выбор, когда программа driftnet не существует на вашем PATH.

Результаты моей системы:

Поскольку команда не существует, команда «which» просто возвращает пустой результат.

Трудно сказать, сделали ли мы что-то неправильно или нет. Без дрифтернет я тоже не могу вам помочь.

Исследование 2 — несколько более интересное испытание.

Для sha256sum требуется файл для ввода. Здесь я предоставляю свою программу «C++ Hello World», которую вы можете записать в файл «HelloWorld.cc» (или где угодно) или использовать любые ваши собственные файлы.

Всего 10 строк кода, начиная с комментария, имеет 1 пустую строку после включения одного. У меня есть мой редактор, который автоматически удаляет конечные пробелы. Если у вас осталось место, ваш результат может быть другим.

Итак, что происходит, когда вы вычисляете sha256sum файла «HelloWorld.cc» из командной строки? Не нужно спекулировать. просто ПОПРОБУЙТЕ ЭТО!

В командной строке вызовите команду и посмотрите ее ответ на следующей строке:

Возможно, вы можете попробовать свой код с помощью sha256sum и известного файла?

Теперь вы можете увидеть, что может содержать вывод (вашего popen-кода). Для этого исследования ** результат команды sha256sum составляет 1 длинную строку с пробелом в ней.

FYI. Несколько месяцев назад я повредил свой C++ popen-код во время капитального ремонта моей библиотеки. Когда я его исправлю, я планирую вернуться к вашим усилиям, чтобы понять, как вы прогрессируете.

Если ваш код начинает работать. Я призываю вас представить свой собственный ответ!

Если вы можете определить более конкретный вопрос, уточните вопрос.

Я рекомендую вам перейти на C++ код. если вы собираетесь чему-то научиться, и вы хотите узнать C++, не используйте изучение того, что вы нашли.

Мой код снова работает. (обновление 2020/8/2)

Но, сначала позвольте мне поделиться несколькими последствиями философии UNIX, ни в каком конкретном порядке:

Следствие 1 — трубы и фильтры

Фильтры — это программы, которые хорошо справляются. Они принимают входной поток и создают выходной поток, обычно «удаляя» что-то.

В области кодовых метрик руководство может анализировать количество строк, чтобы получить представление о прогрессе (замедление роста строк) и проблемы (не замедляя).

У каждого есть мнение о метриках кода. не каждая строка в файле должна учитываться. Например, я думаю, что пустое пространство важно, но строка пробела не должна считаться кодом. Точно так же полная строка комментария не является кодом. ПО МОЕМУ МНЕНИЮ.

В следующей команде

f1..fn — фильтры, все они представлены как одна команда в оболочку. В моем инструменте показателей кода я создал

представляет собой однострочную подачу в оболочку, которая в конечном итоге содержит 3 номера.

UNIX, например, команда wc, вероятно, существует в вашей системе. На Ubuntu 15.10:

Индикация HelloWorld.cc имеет 10 строк (без фильтрации).

Следствие 2 — списки команд

Список команд — это список команд оболочки, каждый из которых хорошо подходит. Список идентифицирует временную последовательность выполнения. Более общая идея, чем труба и фильтр.

В качестве примера я создал свой редактор (emacs) с назначенным ключом (F8), чтобы предоставить следующую команду компиляции:

Конкретный файл pfn, возможно, вводится один раз, но хранится в буфере истории внутри emacs и, следовательно, нет необходимости повторно вводить их.

Обратите внимание на 3 полуколония. Они ограничивают несколько команд в одной строке, отправленной в командную оболочку Linux. Список команд из 3-х элементов: установите переменную среды для переопределения опции по умолчанию; экспортировать новый флаг, чтобы сделать его доступным для компилятора; и запустить make.

Так? popen() принимает списки команд. «Командный список», такой как оболочка, может принять.

Я, наконец, внимательно прочитал ответ «человек попен».

Функция popen() открывает процесс, создавая канал, разворачивая и вызывая оболочку.

Ваша команда, присвоенная popen, запускается в оболочке.

Но я не могу понять, как это работает.

Теперь этот «материал» должен начать иметь смысл. Мы получаем доступ к оболочке для обработки фильтров команд/команд/каналов. Это запускает «другой» процесс и взаимодействует с первым процессом с использованием PIPE.

Итак, как вывод команды, обработанной в оболочке, переданной в мой код? некоторые подсказки к пониманию следуют. В комплект входит отдельная тестовая демонстрация, в которой вы можете легко изменить popen cmd, а затем скомпилировать и запустить новый cmd.

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

Я думаю, что копирование/вставка будет проще разделять на 3 раздела. Но помните, у меня есть весь код в одном файле. Не один заголовочный файл, но он работает для меня. Если хотите, вы можете реорганизовать файлы.h и.cc.

Илон Маск рекомендует:  Asp приемы управления приложением

И теперь POpenWrite_t:

Затем у меня есть то, что я называю T514_t, класс, который определяет мой unit тест или демонстрационные усилия. Запись находится в ‘exec()’.

Оказывается, оболочка, используемая в папке, может отличаться от оболочки, которую вы используете в терминале. Во время запуска сеанса часть оболочки решает, находится ли она в интерактивном (терминальном) или неинтерактивном (без терминала) режиме. В моей системе терминальная/интерактивная оболочка «bash», а всплывающая/неинтерактивная оболочка — «sh». Помните об этом при разработке команд оболочки для popen.

Интересное использование POpenRead_t находится в методе «std :: string shellCheck (std :: stringstream & rsltSS)».

И, наконец, моя главная. Здесь всего лишь несколько вещей.

Итак, создайте и играйте с std :: string cmd; в режиме, в котором вы заинтересованы. Удачи.

блог JOHN_16

Здесь я планирую размещать небольшие статьи на интересующие меня темы.

воскресенье, 3 октября 2010 г.

Python: модуль subprocess. Перевод документации с комментариями и примерами. Особенности применения.

Начиная с версии 2.4, библиотека Python’а включает в себя модуль subprocess – унифицированное средство для запуска новых процессов, подключения к их потокам ввода, вывода, ошибок, и получения возвращаемого кода по завершению. Он призван заменить такие инструменты как os.system, os.spawn*, os.popen*, popen2.*,commands.* единым механизмом.

в котором расположена основная программа. Модуль импортировался командой from subprocess import *, остальные модули простым импортированием,в коде присутствуют полные ссылки. Примеры рассматривались в Windows XP SP3 + python 2.6.2 и openSUSE 11.3 linux + python 2.6.5, справочный материал взят из версии 2.6, в версии 2.7 особо важных изменений нет.

Модуль определяет в себе основной для использования класс Popen , который вызывает процесс и возвращает управление программе не ожидая его завершения:

args – строка или последовательность аргументов программы. Обычно первым указывают исполняемую программу, а затем аргументы, но также ее можно указать в параметре executable.

На UNIX-подобных ОС с shell=True: если args строка, то она является командной строкой для выполнения в оболочке. Если args последовательность, то первый элемент определяет команду, а остальные элементы обрабатываются как дополнительные аргументы оболочки.

На Windows: класс Popen использует CreateProcess() для выполнения дочерней программы, который работает на основе строк. Если args последовательность, то она будет конвертирована в строку, используя list2cmdline() метод.

#Пример ниже вызвает программу prog находящуюся в каталоге my folder и передает ей параметр 4:
child=Popen([ ‘./my folder/prog’ , ’4’ ])

# пример вызывает встроенную функцию UNIX-подобных ОС ls
child=Popen([ ‘ls -l’ ], shell=True)

bufsize если задан, имеет тоже значение, что и передаваемый параметр в встроенную функцию open() : 0 – без буферизации, 1 – линейная буферизация, любое другое положительное значение – использование буфера заданным размером (значение будет аппроксимировано), любое другое отрицательное значение -; использование системных настроек по умолчанию, что обычно означает полную буферизацию.

executable – определяет программу для выполнения. Этот параметр редко нужен: обычно программу для выполнения определяют в аргументе args. Если shell=True, то executable определяет оболочку, которая будет использоваться. В UNIX-системах по умолчанию оболочкой является /bin/sh, в Windows по умолчанию оболочка определяется COMSPEC переменой среды.

#Пример ниже выполнит процесс arg передав ему параметры.
child=Popen([ ‘-n’ , ‘2’ , ‘my.txt’ ], executable= ‘arg’ )

#Пример ниже показывает как сменить оболочку для выполнения
child=sp.Popen([ ‘—version’ ], executable= ‘/bin/zsh’ , shell=True)
zsh 4.3.10 (i686-pc-linux-gnu)

# Однако с bash результат работы оказывается неверным задуманному, причина такого поведения мне на данный момент не ясна:
child=sp.Popen([ ‘—version’ ], executable= ‘/bin/bash’ , shell=True)
/bin/sh: —: недопустимая опция

stdin, stdout, stderr определяют стандартные потоки ввода, вывода, ошибок соответственно. Аргументы могут принимать значения PIPE, существующий файловый дескриптор, существующий файловый объект, None. Значение PIPE указывает на создание нового канала (pipe). Со значением None перенаправление происходить не будет, дочерний процесс наследует поток от предка. stderr – может принимать значение STDOUT, означающее, что вывод ошибок будет происходить в поток stdout.

Здесь стоит помнить, что цикл будет работать до тех пор пока вызываемое приложение не отошлет в канал символ конца файла EOF, сигнализируя о завершении работы. В этом случае метод readline вернет пустую строку и тогда перестанет выполняться условия цикла.

#пример ниже создаст для потока вывода лог файл, в который будет осуществляться вывод.
child=sp.Popen([ ‘ls’ ],shell=True,stdout=open( ‘out.log’ , ’a’ )

# Предположим что у вас есть приложение prog которое ожидает ввода от пользователя данных для продолжения работы, тогда ее вызов будет выглядеть так:
сhild=sp.Popen([ «./prog» ],stdin=sp.PIPE, shell=False)
child.stdin.write( “100\n” )

Если значению аргумента preexec_fn присвоен вызываемый объект, то этот объект будет вызван в дочернем процессе перед его выполнением (только для UNIX).

# пример основан на демо в самом модуле subprocess.py. Перед вызовом процесса меняем его UID (выполнять скрипт нужно с соответствующими правами).
sp.Popen([ «id» ])
sp.Popen([ «id» ], preexec_fn=lambda: os.setuid(1000))
sp.Popen([ «id» ])

# Результат работы:
u >u >u >

Если аргументу close_fds присвоено значение True, то все дескрипторы, исключая 0, 1 и 2 будут закрыты перед выполнением дочернего процесса (только для UNIX).

Если аргументу shell присвоено значение True, то команда будет выполнена через оболочку.

# пример ниже воспользуется командой оболочки OS Windows для просмотра содержимого текущего каталога
child=sp.Popen([ ‘dir’ ],shell=True)

# пример ниже показывает аналогичное в UNIX
child=sp.Popen([ ‘ls -l’ ],shell=True)

# однако эта же команда работает и без указания shell. Стоит обратить внимание что в случае shell=True необходимая команда задается целиком одной строкой, в случае False это может быть последовательность (об этом говорилось в начале):
child=sp.Popen([ ‘ls’ , ‘-l’ ],shell=False)

Если значение аргумента cwd не является None, то директория дочернего процесса будет изменена на это значение перед его выполнением. Однако это директория не рассматривается при поиске исполняемого файла (это утверждение я опровергну ниже).

которая вызывает программу fl.exe находящуюся в каталоге

\folder, работа которой состоит в создании файла tmp в текущей для нее директории. Если мы воспользуемся следующим кодом):
child=sp.Popen([ «folder\\fl.exe» , «3» ])
#, то убедимся, что файл tmp был создан не в каталоге

Илон Маск рекомендует:  Что такое код imagecreatetruecolor

\folder, где находится создавшая его программа, а в каталоге

, где находится вызывающая программа. Часто это не желаемое поведение программы. Это произошло потому что дочерний процесс унаследовал от предка его рабочую директорию. В противном случае код будет выглядеть следующим образом:
child=sp.Popen([ «folder\\fl.exe» , «3» ], cwd= ’folder’ )
# или в случае если полный путь до программы задается переменной удобно воспользоваться следующим:
path= ”D:\\

\\folder\\fl.exe”
child=Popen([path,3], cwd=os.path.dirname(path), shell=False)

#В случае с Линуксом я нашел расхождение между документацией и реальным поведением. При таком же расположении файлов вызов:
child=sp.Popen([ «./folder/fl» , «3» ], cwd= «./folder» )
# привет к ошибке отсутствия файла, но вызов:
child=sp.Popen([ «./fl» , «3» ], cwd= «./folder» , shell=False)
# произойдет успешно. Так как в случае с Windows подобного не наблюдается, я не исключаю возможности бага как в самом питоне, так и в самой документации.

Если значение аргумента env не является None, то оно должно быть mapping, который определяет переменные окружения для нового процесса. Используется вместо наследования окружения текущим процессом, что является поведением по умолчанию.

Если аргументу universal_newlines присвоено значение True,то файловые объекты stdout,stderr открываются как текстовые файлы, но строки могут быть окончены любым способом представления: ‘\n’ – UNIX, ‘\r’ – старые версии Macintosh, ‘\r\n’ – Windows. Все эти представления конвертируются в ‘\n’ подобном представлении внутри Питона.

Если заданы аргументы startupinfo и creationflags, то их значение передаются в функцию CreateProcess(). Аргументы отвечают за поведение основного окна и приоритета процесса (только для Windows).

Отмечу, что переменные находятся в пространстве имен модуля win32process.

В одном из своих проектов я писал приложение с GUI которое запускало бы приложение и весь его вывод помещала в текстовой виджет. Это приложение находилось, предположим, в каталоге

, вызываемый скрипт в

\folder, который циклично раз в сутки запускал, рядом лежащую, консольную программу prog.exe с заданными параметрами. Сам скрипт работал, как задумано, но в случае если его самого запускал сторонний программный код, то появлялось пустая консоль от программы prog.exe (пустая потому что вывод от нее корректно перехватывался скриптом). Тогда я не понимал, почему такое происходит, ведь я же задал stdout. Как оказалось это суждение ошибочно и MS Windows имеет свои нюансы. Проблема решилась установкой параметра crateflags=8, что соответствует значению DETACHED_PROCESS. Внимание: при программировании под Windows крайне желательно принимать во внимание эти параметры и не опираться на поведение по умолчанию.

Исключения, возбужденные в дочернем процессе перед началом выполнения процесса будут переданы предку. Также, объект исключения будет иметь дополнительный атрибут child_traceback, представляющий собой строку содержащую информацию об обратной трассировке с точки зрения дочернего процесса.

Наиболее часто встречающееся исключение OSError происходит, например, при попытке выполнения несуществующего файла [Error 2]. Приложения должны быть подготовлены для обработки таких случаев.

ValueError будет возбуждено если в Popen передать неверные аргументы.

Check_all() будет вызывать исключение CalledProcessError если вызываемый процесс вернет не нулевое значение.

Как мы могли убедиться при stdout=PIPE вывод print child.stdout.readline() осуществляется только после того, как поток получил EOF. А что если необходимо получить вывод по мере его поступления? Возможно bufsize для этого и предназначен, однако у меня это не работает. Но если речь идет о запуске скриптов на питоне то можно поступить несколькими способами:

1) передать интерпретатору ключ –i, который активизирует интерактивный режим, после выполнения скрипта появится интерактивная консоль. Нам этого не надо, поэтому, что бы этого избежать, в вызываемом скрипте в конце нужно добавить os._exit(0).в Итоге имеем:

Что такое код mcal_popen

В чем разница между двумя?

Моя конкретная цель — запустить следующую команду из Python. Я не уверен, как перенаправления работают.

Я прочитал the documentation и там написано, что call () — это удобная функция или функция быстрого доступа Мы теряем какую-то власть, используя call () вместо Popen ()?

> Установите ключевое слово аргумент shell = True или исполняемый файл = / path / to / the / shell и укажите команду так, как она у вас есть.
> Поскольку вы просто перенаправляете вывод в файл, установите аргумент ключевого слова

где объект указывает на выходной файл.

Popen не блокирует, позволяя вам взаимодействовать с процессом во время его работы или продолжать заниматься другими вещами в вашей программе Python. Вызов Popen возвращает объект Popen.

звонок блокирует. Хотя он поддерживает все те же аргументы, что и конструктор Popen, вы все равно можете установить выходные данные процесса, переменные окружения и т. Д., Но ваш сценарий ожидает завершения программы, а call возвращает код, представляющий состояние выхода процесса.

Что такое код mcal_popen

(PHP 3>= 3.0.13, PHP 4 >= 4.0.0)

mcal_popen — Opens up a persistent MCAL connection

Description

int mcal_popen (string calendar, string username, string password [, int options])

Returns an MCAL stream on success, FALSE on error.

mcal_popen() opens up an MCAL connection to the specified calendar store. If the optional options is specified, passes the options to that mailbox also. The streams internal event structure is also initialized upon connection.

Что такое код mcal_popen

16 просмотра

1 ответ

6 Репутация автора

Я использовал это для получения списка ips из журнала. Он ищет шаблон в части журнала между st_time и en_time. Теперь это устарело? Итак, как преобразовать это в подпроцесс. Я нахожу os.popen проще. Может ли кто-нибудь сказать эквивалентный код подпроцесса

Ответы (1)

плюса

87120 Репутация автора

subpocess Код будет примерно эквивалентен.

Однако вы можете легко заменить его собственным кодом Python.

В output этом случае это список. Каждая захваченная линия все еще содержит свою завершающую новую строку. (Легко исправить, если это не то, что вы хотите, конечно.)

Это также должно быть легко адаптировать к сценарию, где st_time не происходит точно в файле журнала. Вам нужно будет разобрать отметку времени в каждой строке, а затем просто начать обработку, когда маркер даты синтаксического анализа равен или больше (разобранное) st_time значение.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL