chowpay
chowpay

Reputation: 1687

printing and writing out a generator object

Trying to incorporate a generator object into my code but some how its not working correctly.

def get_data():
    data = some_api_call
    result = data.json()
    return result

result looks like like this, where each {} is on new line:

{u'bytes_out': 1052.0, u'host': u'abc.com'}
{u'bytes_out': 52.0, u'host': u'def.com'}
{u'bytes_out': 5558.0, u'host': u'xya.com'}
...


def write_to_file(line):
    #replacing the write statement with a print for testing
    print(line)

def read_report(data):
    for line in data:
        yield line

def main():
    alldata = get_data()
    write_to_file(read_report(alldata))

My expectation here is that it should print out:

{u'bytes_out': 1052.0, u'host': u'abc.com'}
{u'bytes_out': 52.0, u'host': u'def.com'}
{u'bytes_out': 5558.0, u'host': u'xya.com'}

but what im getting back is :

<generator object read_report at 0x7fca02462a00>

not sure what I'm missing here

*** EDIT - fixed I was using it incorrectly

def main():
    all_data = get_data()
    for line in read_report(all_data)
        print(line)

Upvotes: 0

Views: 587

Answers (1)

Andreas
Andreas

Reputation: 9197

You can also print directly from a generator:

gen = range(1,10)
print(*gen, flush=True)
#out: 1 2 3 4 5 6 7 8 9

so for your case:

print(*read_report(all_data), flush=True)

Upvotes: 1

Related Questions