Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Piping data into Python on the command line - Windows 2000

Reply
Thread Tools

Piping data into Python on the command line - Windows 2000

 
 
Christian Long
Guest
Posts: n/a
 
      06-25-2003
Hi

I'm trying to pipe data into a python program on Windows 2000, on the
command line.

Like this:
dir | myProgram.py


Here's what I tried:

== readFromStdin.py ==
#!/usr/bin.env python
import sys
print sys.sdtin.readlines()


When I run it on Linux and Windows, results differ
ls -l | ./readFromStdin.py - Works on Linux

dir | readFromStdin.py - Doesn't work on win2000
IOError: [Errno 9] Bad file descriptor

The ultimate goal is to write python scripts that I can use from
Komodo's (Python IDE) Run Command feature. I'm running Komodo on
Windows 2000.

I want to highlight some text in Komodo, and run my command, pasting
the output of my program back in to the file I was editing in Komodo.

Komodo makes this easy with built-in commands like sort. You just
select the "Pass Selection As Input" and "Insert Output" options,
highlight some text, type "sort" in the Run Command box, and voila,
Komodo pipes your highlighted text to sort, and pastes the sorted text
back into your editor window.

I want to write a Python program that can behave in the same way as
sort does, for use with Komodo on Windows 2000.

Thanks!

Christian Long
 
Reply With Quote
 
 
 
 
David Bolen
Guest
Posts: n/a
 
      06-25-2003
http://www.velocityreviews.com/forums/(E-Mail Removed) (Christian Long) writes:

> dir | readFromStdin.py - Doesn't work on win2000
> IOError: [Errno 9] Bad file descriptor


I don't know if you're saying you have a problem with Komodo, or just
during your specific tests, but the above case (presuming that you're
running this from a standard Windows command, cmd.exe) is a bug in
Windows cmd.exe. When trying to use I/O redirection and registered
file extensions to automatically find an executable, the redirection
doesn't work properly. If you change this command to:

dir | python readFromStdin.py

it should work (replace "python" with the full path to your python.exe
if it isn't in your path).

Whether or not this affects Komodo's Run box depends on just how
Komodo starts up the child process. It's possible that Komodo is just
executing cmd.exe and passing in its command, in which case supplying
a Python script directly may trigger the same bug as above (or it may
not since it's actually the stdin/stdout to cmd.exe and thus Komodo
that is being passed to the Python script). If it doesn, then I
expect you'll need to be explicit about Python being the executable
you are running. Either that or maybe write a wrapper batch file
which can contain the explicit reference to python, to avoid having to
type it into the Komodo Run box.

BTW, another alternative to your script would be:

import fileinput

for line in fileinput.input():
print line,

which will work both with data on stdin as well as having filenames
specified on the command line if desired (also similar to how the Unix
sort command and many other Unix utilities work). It also doesn't
need to bring all the input into memory before processing (although
you could get that with your prior script by using readline() rather
than readlines()). The main drawback is that it's not the fastest way
to process lines, but its performance has gotten better in recent
Python releases due to general improvements in file I/O processing.

-- David
 
Reply With Quote
 
 
 
 
JanC
Guest
Posts: n/a
 
      06-26-2003
David Bolen <(E-Mail Removed)> schreef:

> I don't know if you're saying you have a problem with Komodo, or just
> during your specific tests, but the above case (presuming that you're
> running this from a standard Windows command, cmd.exe) is a bug in
> Windows cmd.exe. When trying to use I/O redirection and registered
> file extensions to automatically find an executable, the redirection
> doesn't work properly. If you change this command to:
>
> dir | python readFromStdin.py
>
> it should work (replace "python" with the full path to your python.exe
> if it isn't in your path).


I don't know if this is a bug in cmd.exe, but at least command.com on Win9x
does know nothing about "registered extensions" unless you use the "start"
command.

dir | start readFromStdin.py

This works but "start" opens a new window that is closed when the script
exits (you don't get the time to read the output).

--
JanC

"Be strict when sending and tolerant when receiving."
RFC 1958 - Architectural Principles of the Internet - section 3.9
 
Reply With Quote
 
Duncan Booth
Guest
Posts: n/a
 
      06-26-2003
(E-Mail Removed) (Christian Long) wrote in news:(E-Mail Removed) om:

> I'm trying to pipe data into a python program on Windows 2000, on the
> command line.
>
> Like this:
> dir | myProgram.py
>
>

This is a well known problem with Windows command line processor.
Try searching Google groups for "Python pipe win2k" and you will
find several similar threads.

e.g.
http://groups.google.co.uk/groups?th...vanderbilt.edu

Try running your command with an explicit call to the Python interpreter:

dir | python myProgram.py

--
Duncan Booth (E-Mail Removed)
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?
 
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
Piping data in on the command line James Coglan Ruby 5 07-11-2008 06:08 PM
piping into a python script Donn Ingle Python 16 02-01-2008 10:34 AM
Piping data into script under Win32 runes Python 5 04-16-2005 03:52 AM
Piping ping into perl-prog bernd wegener Perl 3 09-22-2004 06:32 PM
Piping to windows command line .rb file doesn't work Mills Thomas (app1tam) Ruby 1 10-15-2003 01:02 AM



Advertisments