2013-10-03 2 views
0
import os 

test = os.system("ls /etc/init.d/ | grep jboss- | grep -vw jboss-") 
for row in test: 
    print row 

По какой-то причине это дает итерацию TypeError: итерацию по ошибке без последовательности.Python TypeError: итерация по непоследовательности в простой список

Когда я делаю тест печати без цикла for, он дает список экземпляров jboss, а также «0» внизу.

+4

Прочитайте [документацию] (http://docs.python.org/2/library/os.html#os.system). 'os.system' не возвращает какой-либо вывод программы, с которой вы работаете. – BrenBarn

+0

Вы видите комбинацию стандартного вывода из конвейера с фактическим значением 'test' (0) на конце. – chepner

ответ

6

os.system() возвращает код выхода процесса, не результат из grep команд. Это всегда целое число. В то же время вывод самого процесса не перенаправляется, поэтому он напрямую записывает stdout (минуя Python).

Вы не можете перебирать целое число.

Вместо этого вы должны использовать subprocess.check_output() function, если хотите получить вывод команды stdout.

В этом случае, вы бы лучше использовать os.listdir() и код весь поиск в Python вместо:

for filename in os.listdir('/etc/init.d/'): 
    if 'jboss-' in filename and not filename.startswith('jboss-'): 
     print filename 

Я интерпретировал команду grep -vw jboss-, как отфильтровывать имена файлов, которые начинаются с jboss; при необходимости отрегулируйте.

1

Проблема в том, что os.system возвращает код выхода. Если вы хотите, чтобы захватить выход, вы можете использовать subprocess.Popen:

import subprocess 
p = subprocess.Popen("ls", stdout=subprocess.PIPE), 
out, err = p.communicate() 
files = out.split('\n') 

отметить также, что использование subprocess модуля рекомендуется:

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this [ os.system ] function.

Если вам не придется прибегать к оболочке, чистое решение python, как предлагает @Martijn Pieters, кажется предпочтительным.

Смежные вопросы