On 20/01/18 18:26, Derek Smith wrote: > import os > import sys > from subprocess import Popen, PIPE > > pipe = Popen('lsdev -c tape', shell=True, stdout=PIPE) > > for dev in pipe.stdout : > print ( dev.strip().split()[0].decode() ) ## A ##
This is OK > # print ( dev.strip().split().decode()[0] ) ## B ## This tries to decode a list which won't work. split() returns a list. You want to apply decode to a string, specifically the first string that split produces, so it is correct as in option A. If in doubt split the line up and print each component as you create it: for dev in pipe.stdout : print( dev.strip() ) print( dev.strip().split()) print( devb.strip().split()[0]) print( dev.strip().split()[0].decode() ) > And if I try to store in an array using > > rmts = [ dev.strip().split()[0].decode() ] > > it only stores the last line when there are over 100 lines. Wrong, it stores every line as it comes to it. But, since you create a new list each time you throw way the previous one. Only the last list is preserved, but they were all stored, albeit briefly... You need to append() to a list, something like: aList = [] for dev in.... process dev aList.append(result) Or as a list comprehension: aList = [process(dev) for dev in ....] -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor