bartc <b...@freeuk.com>: > The internal utilities used within an operating system, primarily > intended for file or redirected i/o with no live interaction, should be > distinct from those designed to be used directly with a live user. > > Or is it against the rules of Unix to have two different versions of a > program? > > Then you might have 'sort' for the non-interactive version, and 'isort' > or whatever for the interactive.
You are right that interactive programs exist and operate very differently from what are known as *tools*. Interactive Linux programs include: LibreOffice NetworkManager Firefox Skype XBoard Emacs GIMP top gdb etc. I don't know if anybody has seen a market/need for an interactive sort program, but there's nothing preventing you from writing one. > So I can't see the point of using that same pattern of input usage > (reading from stream, file, pipe whatever until interrupted with an > EOF signal) for a true interactive program that is used in a sensible > manner. So go ahead and write an interactive sort program. It might employ a mouse, joystick, iris scanner, touchscreen, sound effects or whatever facilities you would think would be useful for the human user. > A program like 'python' might fit the bill too. Here, you can give it > the name of a file, OR say nothing, and it will take input from stdin. Personally, I think stdin is a bit lame as a stimulus source for an interactive program. That's not even what stdin is primarily meant for; stdin is meant to be the input data for a job. Similarly, stdout is meant to be the result of the computation. Stderr, then, is used to deliver optional diagnostic messages, ie, metainfo about the computation. For interaction with a human, you should look into frameworks like Qt or curses. > Funnily enough, you now get a message, and a prompt. And when entering > multiple lines of code, you get a prompt before each line. You can > also terminate the sequence by entering a blank line. > > So it IS possible to do it properly after all!) The Unix terminal can operate in two main modes: canonical and non-canonical. The latter is typically used for interaction. See: <URL: https://en.wikipedia.org/wiki/POSIX_terminal_interface#C anonical_mode_processing> Marko -- https://mail.python.org/mailman/listinfo/python-list