Выполните cmd из python и получите непрерывный вывод

вот моя проблема: мне нужно выполнить команду cmd из python, команда не выполняется быстро, она будет выполняться в течение более длительного периода времени. Что мне нужно, так это способ #1 выполнить команду и #2 получить непрерывный вывод этой команды.

Пример вывода:
какой-то текст... (затем примерно полминуты ожидания)
еще какой-то текст... (ожидание некоторое время)
еще текст...

Вы поняли, вывод происходит примерно каждые 30 секунд. Мне нужно поймать все выходы и что-то с ними сделать. Есть ли способ сделать это?

Я знаю, что могу выполнить команду с помощью os.system('command'), но я изо всех сил пытаюсь найти способ прочитать вывод!

Посмотрите на модуль subprocess. Это немного крутая кривая обучения, но выполнение того, что вы хотите, имеет больше вариаций, чем вы ожидаете. os.system() считается устаревшим почти 20 лет (начиная с Python 2.4), одной из причин которого является проблема, с которой вы столкнулись.

BoarGules 17.03.2022 11:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простое решение приведено в этот ответ. В питоне 3 это будет примерно так:

#!/usr/bin/env python3
import subprocess

proc = subprocess.Popen('./your_process', stdout=subprocess.PIPE)

while True:
    line = proc.stdout.readline()
    if not line:
        break
    else: 
        # Do whathever you need to do with the last line written on 
        # stdout by your_process
        print("doing some stuff with...", line)
        print("done for this line!")

конечно, вам все равно нужно учитывать, как процесс-производитель буферизует stdout, то есть, если подпроцесс что-то вроде

#include <stdio.h>
#include <unistd.h>

int main()
{
    for (int i = 1; i < 10000000; i++) {
        printf("ping");
        sleep(1);
    }
}

потребительский скрипт просто прочитает много «пингов» вместе (что можно решить с помощью fflush(stdout) в цикле).

Гораздо более сложное решение можно найти в этот ответ.

Другие вопросы по теме