[Tutor] Python popen command using cat > textfile .... how to terminate

Martin Walsh mwalsh at mwalsh.org
Fri May 15 01:31:32 CEST 2009


MK wrote:
> Hi there,
> 
> i am using this code to send an "cat > ThisIsMyUrl" with popen.
> Of cos cat now waits for the CTRL+D command. 
> How can i send this command ?
> 
> def console_command(cmd):
> 	print cmd
> 	console = os.popen(cmd,"r")
> 	output = console.read()
> 	console.close()
> 	return output
> 
> command="cat > " + working_dir + "/" + subdir + "www.thisismyurl.com"
> console_command(command)

Ignoring the subprocess module for a moment, you could use os.popen2
instead of os.popen and then close the stdin fd to simulate a CTRL-D(EOF).

stdin, stdout = os.popen2(cmd)
stdin.write('This is line 1.\n')
stdin.close() # CTRL-D

With the subprocess module, you might do something like this (untested) ...

from subprocess import Popen, PIPE
console = Popen(
    cmd, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True
)
console.stdin.write('This is line 1.\n')
console.stdin.close()
# ... or just ...
# console.communicate('This is line 1.\n')

But, I can't figure out why you would want to do this. Or I should say
it's not at all clear to me what you are trying to accomplish --
although I suspect you are making it difficult for yourself.

Can you provide a brief explanation of what you are trying to achieve?

HTH,
Marty


More information about the Tutor mailing list