Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Why is there no platform independent way of clearing a terminal?

Reply
Thread Tools

Why is there no platform independent way of clearing a terminal?

 
 
Ulrich Eckhardt
Guest
Posts: n/a
 
      07-28-2010
Daniel Fetchinson wrote:
> After getting the technicalities out of the way, maybe I should have
> asked:
>
> Is it only me or others would find a platform independent python API
> to clear the terminal useful?


There are two kinds of programs:
1. Those that process input to output. If one of those suddenly started by
clearing my screen, I'd just dump it. Also, if output is redirected to a
file or piped into another program, that is basically useless or even
hurting, since you then end up with control sequences in the file.

2. Those that provide a text-based interactive UI. Those typically not only
clear the screen, but also control its whole layout and content, so there
you don't only need ways to clear the screen but also to position the
cursor or draw boxes etc. In that case you need a full "curses" library.

Summary: No, I don't see the need for such an API.

Cheers!

Uli

--
Sator Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932

 
Reply With Quote
 
 
 
 
Jonathan Hartley
Guest
Posts: n/a
 
      07-28-2010
On Jul 28, 8:08*am, Ulrich Eckhardt <(E-Mail Removed)> wrote:
> Daniel Fetchinson wrote:
> > After getting the technicalities out of the way, maybe I should have
> > asked:

>
> > Is it only me or others would find a platform independent python API
> > to clear the terminal useful?

>
> There are two kinds of programs:
> 1. Those that process input to output. If one of those suddenly started by
> clearing my screen, I'd just dump it. Also, if output is redirected to a
> file or piped into another program, that is basically useless or even
> hurting, since you then end up with control sequences in the file.
>
> 2. Those that provide a text-based interactive UI. Those typically not only
> clear the screen, but also control its whole layout and content, so there
> you don't only need ways to clear the screen but also to position the
> cursor or draw boxes etc. In that case you need a full "curses" library.
>
> Summary: No, I don't see the need for such an API.
>
> Cheers!
>
> Uli
>
> --
> Sator Laser GmbH
> Geschftsfhrer: Thorsten Fcking, Amtsgericht Hamburg HR B62 932



I don't know much, but just in case the following is useful to anyone:

There is a Windows program called 'ansicon', which when installed (run
with '-i'), will modify all future Windows cmd shells to correctly
intercept and interpret ANSI escape codes for colors, cursor movement,
and:

\e[#J ED: Erase Display

which I presume is what is under discussion here. I understand there
are other historical ANSI drivers which were responsible for achieving
a similar thing under Windows, but this is the method I currently use
(on XP) and am very happy with.

Also, and probably less usefully, personally I do wish Python provided
a cross platform mechanism for simple terminal control like clearing
and colored text. Since ANSI codes are used everywhere except Windows,
it would make sense to base such a system on them. So I started a pure
Python implementation of a crude ANSI driver, on PyPI as 'colorama'.
It does nothing on non-windows systems, but on Windows it patches
sys.stdout with a stream-like object, in order to filter out ANSI
codes and convert them into Win32 terminal control calls. It currently
only works with colors and brightness, but I would love to extend it
to cover other ANSI codes such as 'clear screen'. It is doubtless
riddled with errors and misunderstandings, and I would love any
feedback helping me do a better job.

Best regards,

Jonathan
 
Reply With Quote
 
 
 
 
Daniel Fetchinson
Guest
Posts: n/a
 
      07-28-2010
>> After getting the technicalities out of the way, maybe I should have
>> asked:
>>
>> Is it only me or others would find a platform independent python API
>> to clear the terminal useful?

>
> There are two kinds of programs:
> 1. Those that process input to output. If one of those suddenly started by
> clearing my screen, I'd just dump it. Also, if output is redirected to a
> file or piped into another program, that is basically useless or even
> hurting, since you then end up with control sequences in the file.
>
> 2. Those that provide a text-based interactive UI. Those typically not only
> clear the screen, but also control its whole layout and content, so there
> you don't only need ways to clear the screen but also to position the
> cursor or draw boxes etc. In that case you need a full "curses" library.
>
> Summary: No, I don't see the need for such an API.


Okay, that makes perfect sense, thanks for the exaplanation!
I'll just live with the platform.system( ) check for this particular
problem then.

Cheers,
Daniel

--
Psss, psss, put it down! - http://www.cafepress.com/putitdown
 
Reply With Quote
 
Daniel Fetchinson
Guest
Posts: n/a
 
      07-28-2010
>> > After getting the technicalities out of the way, maybe I should have
>> > asked:

>>
>> > Is it only me or others would find a platform independent python API
>> > to clear the terminal useful?


> I don't know much, but just in case the following is useful to anyone:
>
> There is a Windows program called 'ansicon', which when installed (run
> with '-i'), will modify all future Windows cmd shells to correctly
> intercept and interpret ANSI escape codes for colors, cursor movement,
> and:
>
> \e[#J ED: Erase Display
>
> which I presume is what is under discussion here. I understand there
> are other historical ANSI drivers which were responsible for achieving
> a similar thing under Windows, but this is the method I currently use
> (on XP) and am very happy with.
>
> Also, and probably less usefully, personally I do wish Python provided
> a cross platform mechanism for simple terminal control like clearing
> and colored text. Since ANSI codes are used everywhere except Windows,
> it would make sense to base such a system on them. So I started a pure
> Python implementation of a crude ANSI driver, on PyPI as 'colorama'.
> It does nothing on non-windows systems, but on Windows it patches
> sys.stdout with a stream-like object, in order to filter out ANSI
> codes and convert them into Win32 terminal control calls. It currently
> only works with colors and brightness, but I would love to extend it
> to cover other ANSI codes such as 'clear screen'. It is doubtless
> riddled with errors and misunderstandings, and I would love any
> feedback helping me do a better job.


Thanks, I didn't know about 'colorama' before but it surely looks promising!
I'll look into it for future reference, once in a while I like having
pretty output without the hassle of 'curses' or other complicated
stuff.

Cheers,
Daniel


--
Psss, psss, put it down! - http://www.cafepress.com/putitdown
 
Reply With Quote
 
Emile van Sebille
Guest
Posts: n/a
 
      07-28-2010
On 7/28/2010 4:23 AM Daniel Fetchinson said...
>
> Okay, that makes perfect sense, thanks for the exaplanation!
> I'll just live with the platform.system( ) check for this particular
> problem then.
>



If all else fails, repeating 24 (or 40,60?) lines feeds clears the
screen cross platform.

Emile

 
Reply With Quote
 
Jonathan Hartley
Guest
Posts: n/a
 
      07-28-2010
On Jul 28, 8:08*am, Ulrich Eckhardt <(E-Mail Removed)> wrote:
> Daniel Fetchinson wrote:
> > After getting the technicalities out of the way, maybe I should have
> > asked:

>
> > Is it only me or others would find a platform independent python API
> > to clear the terminal useful?

>
> There are two kinds of programs:
> 1. Those that process input to output. If one of those suddenly started by
> clearing my screen, I'd just dump it. Also, if output is redirected to a
> file or piped into another program, that is basically useless or even
> hurting, since you then end up with control sequences in the file.
>
> 2. Those that provide a text-based interactive UI. Those typically not only
> clear the screen, but also control its whole layout and content, so there
> you don't only need ways to clear the screen but also to position the
> cursor or draw boxes etc. In that case you need a full "curses" library.
>
> Summary: No, I don't see the need for such an API.
>
> Cheers!
>
> Uli
>
> --
> Sator Laser GmbH
> Geschftsfhrer: Thorsten Fcking, Amtsgericht Hamburg HR B62 932



Hey,

Your point seems good and I don't mean to contradict, but out of
interest, what do you think about an example like the following:

I want to write a quick script which, notices whenever I save my
source code, and re-runs the unit tests, displaying the output. I
think I'd like it to clear the terminal before each re-run of the
tests, so that it's immediately obvious what is output from the
current run, as opposed to previous runs. Then I can keep my editor
focussed, but leave that running in a terminal and trust it to simply
display the current output from my tests.

I did dash off a quick and dirty version of this once which did a
system 'clear' or 'cls' depending on the platform, but to my dismay I
found that on Windows this caused focus to jump briefly to the
terminal every time it ran 'clear' (!), making it extremely annoying
in use. So I wished there had been a simple cross-platform way to
clear the terminal. (this, and printing colored text, was my initial
use case for starting 'colorama')

Is this a silly desire of mine, or simply an uncommon edge case that
therefore isn't really significant?

Best regards,

Jonathan
 
Reply With Quote
 
Jonathan Hartley
Guest
Posts: n/a
 
      07-28-2010
On Jul 28, 4:45*pm, Jonathan Hartley <(E-Mail Removed)> wrote:
> On Jul 28, 8:08*am, Ulrich Eckhardt <(E-Mail Removed)> wrote:
>
>
>
> > Daniel Fetchinson wrote:
> > > After getting the technicalities out of the way, maybe I should have
> > > asked:

>
> > > Is it only me or others would find a platform independent python API
> > > to clear the terminal useful?

>
> > There are two kinds of programs:
> > 1. Those that process input to output. If one of those suddenly started by
> > clearing my screen, I'd just dump it. Also, if output is redirected to a
> > file or piped into another program, that is basically useless or even
> > hurting, since you then end up with control sequences in the file.

>
> > 2. Those that provide a text-based interactive UI. Those typically not only
> > clear the screen, but also control its whole layout and content, so there
> > you don't only need ways to clear the screen but also to position the
> > cursor or draw boxes etc. In that case you need a full "curses" library..

>
> > Summary: No, I don't see the need for such an API.

>
> > Cheers!

>
> > Uli

>
> > --
> > Sator Laser GmbH
> > Geschftsfhrer: Thorsten Fcking, Amtsgericht Hamburg HR B62 932

>
> Hey,
>
> Your point seems good and I don't mean to contradict, but out of
> interest, what do you think about an example like the following:
>
> I want to write a quick script which, notices whenever I save my
> source code, and re-runs the unit tests, displaying the output. I
> think I'd like it to clear the terminal before each re-run of the
> tests, so that it's immediately obvious what is output from the
> current run, as opposed to previous runs. Then I can keep my editor
> focussed, but leave that running in a terminal and trust it to simply
> display the current output from my tests.
>
> I did dash off a quick and dirty version of this once which did a
> system 'clear' or 'cls' depending on the platform, but to my dismay I
> found that on Windows this caused focus to jump briefly to the
> terminal every time it ran 'clear' (!), making it extremely annoying
> in use. So I wished there had been a simple cross-platform way to
> clear the terminal. (this, and printing colored text, was my initial
> use case for starting 'colorama')
>
> Is this a silly desire of mine, or simply an uncommon edge case that
> therefore isn't really significant?
>
> Best regards,
>
> * Jonathan



Oh, plus, while we're on this subject:

Am I right that curses in Python stdlib doesn't work on Windows, and
there is currently no simple way to fix this?

Also, is it crazy to imagine that if colorama was pushed through to
completion (ie. to support a majority of the relevant ANSI codes) then
Python's stdlib curses module, unmodified, would suddenly just work on
Windows? (after a call to 'colorama.init()')

I presume these ideas are oversimplifications or just plain wrong. If
anyone would care to correct my misunderstandings, I'd be very
grateful.
 
Reply With Quote
 
Neil Cerutti
Guest
Posts: n/a
 
      07-28-2010
On 2010-07-28, Jonathan Hartley <(E-Mail Removed)> wrote:
> I want to write a quick script which, notices whenever I save
> my source code, and re-runs the unit tests, displaying the
> output. I think I'd like it to clear the terminal before each
> re-run of the tests, so that it's immediately obvious what is
> output from the current run, as opposed to previous runs. Then
> I can keep my editor focussed, but leave that running in a
> terminal and trust it to simply display the current output from
> my tests.


Perhaps emailing the tests to yourself would be a good solution.
Every tme the tests ran, you'd get a new email containing the
results.

--
Neil Cerutti
 
Reply With Quote
 
Thomas Jollans
Guest
Posts: n/a
 
      07-28-2010
On 07/28/2010 06:01 PM, Jonathan Hartley wrote:
>
> Oh, plus, while we're on this subject:
>
> Am I right that curses in Python stdlib doesn't work on Windows, and
> there is currently no simple way to fix this?
>
> Also, is it crazy to imagine that if colorama was pushed through to
> completion (ie. to support a majority of the relevant ANSI codes) then
> Python's stdlib curses module, unmodified, would suddenly just work on
> Windows? (after a call to 'colorama.init()')
>
> I presume these ideas are oversimplifications or just plain wrong. If
> anyone would care to correct my misunderstandings, I'd be very
> grateful.


Correct: it's not THAT simple.

Python's curses module is a (I'm not sure how thin) wrapper around the
good old UNIX curses (ncurses, ...) library. This is written in C, not
Python, so it doesn't use Python's sys.stdout object to do I/O.

I haven't had a look at colorama, but it sounds like it hooks into
sys.stdout, or Python file objects anyway. Far, far above the layer
curses does I/O on. So, if you ported a normal curses library to
Windows, colorama wouldn't help you a bit.

It might be possible to write a curses-compatible library that works
with cmd.exe. Maybe. But, even if it's possible, I don't think it's
easy, and I especially don't think it would be particularly rewarding.

Also, I just stumbled upon http://adamv.com/dev/python/curses/ -- this
is probably the only reasonable way to get a useful curses API on
Windows: forget the DOS box.
 
Reply With Quote
 
Jonathan Hartley
Guest
Posts: n/a
 
      07-28-2010
On Jul 28, 5:47*pm, Thomas Jollans <(E-Mail Removed)> wrote:
> On 07/28/2010 06:01 PM, Jonathan Hartley wrote:
>
>
>
> > Oh, plus, while we're on this subject:

>
> > Am I right that curses in Python stdlib doesn't work on Windows, and
> > there is currently no simple way to fix this?

>
> > Also, is it crazy to imagine that if colorama was pushed through to
> > completion (ie. to support a majority of the relevant ANSI codes) then
> > Python's stdlib curses module, unmodified, would suddenly just work on
> > Windows? (after a call to 'colorama.init()')

>
> > I presume these ideas are oversimplifications or just plain wrong. If
> > anyone would care to correct my misunderstandings, I'd be very
> > grateful.

>
> Correct: it's not THAT simple.
>
> Python's curses module is a (I'm not sure how thin) wrapper around the
> good old UNIX curses (ncurses, ...) library. This is written in C, not
> Python, so it doesn't use Python's sys.stdout object to do I/O.
>
> I haven't had a look at colorama, but it sounds like it hooks into
> sys.stdout, or Python file objects anyway. Far, far above the layer
> curses does I/O on. So, if you ported a normal curses library to
> Windows, colorama wouldn't help you a bit.
>
> It might be possible to write a curses-compatible library that works
> with cmd.exe. Maybe. But, even if it's possible, I don't think it's
> easy, and I especially don't think it would be particularly rewarding.
>
> Also, I just stumbled uponhttp://adamv.com/dev/python/curses/-- this
> is probably the only reasonable way to get a useful curses API on
> Windows: forget the DOS box.




> ncurses ... is written in C, not
> Python, so it doesn't use Python's sys.stdout object to do I/O.


Ah, I should have spotted that. Of course. Thanks for the
enlightenment.

And Neil Cerutti, I think I'll just email the whole source tree to
myself, and have a script that scans my inbox, unzips source trees and
runs their tests. Much nicer.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Platform-independent way for storing application data Jan Thom Java 15 02-19-2009 04:19 PM
Launching an independent Python program in a cross-platform way (including mac) =?iso-8859-1?B?QW5kcuk=?= Python 8 05-01-2007 11:47 AM
findcontrol("PlaceHolderPrice") why why why why why why why why why why why Mr. SweatyFinger ASP .Net 2 12-02-2006 03:46 PM
Platform independent way to play an mp3 file Gandalf Python 1 08-18-2004 11:13 AM
Platform-independent way to refer to execute path MK Python 1 06-25-2003 05:43 PM



Advertisments