de-vraag
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Danny
Danny
Вопрос

Использование exec в цикле for в python

Я пытаюсь запустить цикл for, который проходит через каждую строку вывода команды. Например:

for line in exec 'lspci | grep VGA':
    count = count + 1

Чтобы попытаться получить количество видеокарт, установленных в системе. Но это не похоже на синтаксис строки цикла for.

Мне нужно импортировать библиотеку для exec? Или я использую это неправильно? Или оба?

благодаря

3 2011-10-27T18:52:59+00:00 4
Программирование
python
exec
NPE
27-го октября 2011 в 6:55
2011-10-27T18:55:53+00:00
Дополнительно
Источник
Редактировать
#56791711

exec executes Python code, not an external command. You're looking for subprocess.Popen():

import subprocess
p = subprocess.Popen('lspci', stdout=subprocess.PIPE)
for line in p.stdout:
  if 'VGA' in line:
    print line.strip()
p.wait()

На моей коробке это печатает

01:00.0 VGA compatible controller: nVidia Corporation GF104 [GeForce GTX 460] (rev a1)
6
0
Mark Byers
27-го октября 2011 в 6:54
2011-10-27T18:54:53+00:00
Дополнительно
Источник
Редактировать
#56791710

Ключевое слово exec выполняет код Python . Он не запускает новые процессы.

Вместо этого попробуйте подпроцесс .

lines = subprocess.check_output(["lspci"]).split('\n')
count = sum('VGA' in line for line in lines)
5
0
Donald Miner
27-го октября 2011 в 7:00
2011-10-27T19:00:37+00:00
Дополнительно
Источник
Редактировать
#56791712

Вы хотите использовать popen (или что-то подобное). exec испускает код python. Например:

exec('x = 4')
print x  # prints 4

Кроме того, вам не хватает скобок, что делает ее не грамматической. exec - это функция:

for line in exec('lspci | grep VGA'):  # this still does not do what you want
    count = count + 1

Вы можете использовать wc -l , чтобы захватить количество строк за один снимок.

import os
count = os.popen('lspci | grep VGA | wc -l').read()
0
0
uncreative
27-го октября 2011 в 7:01
2011-10-27T19:01:31+00:00
Дополнительно
Источник
Редактировать
#56791713

Я написал эту функцию утилиты в python для таких целей

(Причина использования временного файла заключается в том, что если вы откроете подпроцесс и запишете stdout с помощью subprocess.PIPE, когда stdout получит более 64k данных, python просто зависает навсегда.)

import logging
import tempfile
import subprocess
import os


def getPipedCommandOut(cmd):
    """
    cmd - command to execute

    gathers output of command (stderr and stdout) into a temp file

    returns the output of the command
    """
    logging.debug('starting %s' % cmd)

    temp = tempfile.TemporaryFile('w+t')
    try:
        p = subprocess.Popen(cmd, stderr=subprocess.STDOUT,stdout=temp.fileno(), shell=True)
        #pid, status = os.waitpid(p.pid,0) #@UnusedVariable
        status = p.wait()
        temp.seek(0)
        out = temp.read()
        if status != 0:
            raise CommandRunError("COMMAND: %s\tFAILED: %s%s%s" % (cmd, status, os.linesep, out))
        logging.debug('finished %s' % cmd)
    finally: 
        temp.close()
    return out

затем использовать с вашим кодом:

lspciOutput = getPipedCommandOut('lspci | grep VGA')
for line in lspciOutput:
    count = count + 1
0
0
Похожие сообщества 30
Python
Python
15 512 пользователей
Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/802295
Открыть telegram
Python beginners
Python beginners
14 284 пользователей
Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981
Открыть telegram
🐍 Python Stepik Chat
🐍 Python Stepik Chat
7 772 пользователей
Этот уютный чат создан для помощи в решение задач на прекрасном курсе "Поколение Python: курс для начинающих" и не только. Правила: t.me/pythonstepikchat/316777 Чат для оффтопа - t.me/+fqNb78zlQY81NGUy Наш канал - @kimport_this
Открыть telegram
aiogram
aiogram
6 303 пользователей
Repo: https://github.com/aiogram/aiogram Site: https://aiogram.dev Полезная информация: https://t.me/aiogram_ru/168411
Открыть telegram
Python — вакансии и аналитика
Python — вакансии и аналитика
6 048 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Python, Flask и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @golang_jobs, @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs
Открыть telegram
Сообщество Python Программистов
Сообщество Python Программистов
5 858 пользователей
Канал: @pip_install Наши сайты: https://python-scripts.com https://selenium-python.com https://itfy.org Мы в ВК: https://vk.com/open_sourcecode Вакансии: https://t.me/python_scripts_hr
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Roxana Elizabeth CASTILLO Avalos
Зарегистрирован 1 день назад
2
Hideo Nakagawa
Зарегистрирован 2 дня назад
3
Sergiy Tytarenko
Зарегистрирован 3 дня назад
4
shoxrux azadov
Зарегистрирован 6 дней назад
5
Koreets Koreytsev
Зарегистрирован 1 неделю назад
© de-vraag 2022
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией