2

I would like to print to a specific line on stdout using Python.

Say.. I have a loop within a loop. Currently it prints this :

a0,b0,c0,a1,b1,c1,a2,b2,c2,

But actually I want it to print this :

a0,a1,a2,
b0,b1,b2,
c0,c1,c2,

the code looks something like this

import sys

ar = ['a', 'b', 'c']
for i in ar:
    c = 1
    while c < 4:
        sys.stdout.write('%s%s,' % (i, c))
        c += 1

Is there a way of identify the line ? eg print to line X ?

Or - can I write 3 lines to stdout (using '\n'), then go back and overwrite line 1 ?

note: I don't just want to achieve the above ! I can do that by altering the loop - the question is about identifying different lines of stdout and writing to them, if possible

Thanks

12
  • 1
    Possible duplicate of passing \n (new line) on stdout throught sys argument Commented Feb 10, 2017 at 11:44
  • @doctorlove Why? It looks like is not passing it as an argument....or am I missing something? He just uses sys for sys.stdout.write.... Commented Feb 10, 2017 at 11:48
  • @doctorlove I know about new line thanks, it works fine when I use it :) this is about writing to line 'X' not just the next line ('\n') Commented Feb 10, 2017 at 11:49
  • I was just checking if @jowansebastian was after \n or correct encoding or something else. Commented Feb 10, 2017 at 11:54
  • 1
    @hop Understood, but it's quite a good analogy to what I am actually doing with multi-threading. You can consider the outer loops like the separate threads. Commented Feb 10, 2017 at 15:46

1 Answer 1

1

as @hop suggested, the blessings library looks great for this.

For example

from blessings import Terminal

term = Terminal()
with term.location(0, term.height - 1):
    print 'Here is the bottom.'

and in my example, something along the lines of the below works. It does give the output I was looking for.

from blessings import Terminal

term = Terminal()

print '.'
print '.'
print '.'


ar = ['a', 'b', 'c']
x = 1
for i in ar:
    c = 1
    while c < 4:
        with term.location(c*3-3, term.height - (5-x)):
            print str(i)+str(c-1)+','
        c += 1   
    x += 1

gives:

a0,a1,a2,
b0,b1,b2,
c0,c1,c2,
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.