[Tutor] Running a dos program with python

Martin Walsh mwalsh at mwalsh.org
Thu Mar 11 00:12:47 CET 2010


Armstrong, Richard J. wrote:
> Hello all,
> 
> This is my first post to the Tutor at python.org <mailto:Tutor at python.org>
> mailing list. I am in the process of switching from Matlab to Python and
> there is one task that I am having a hard time doing and cannot find the
> answer on the web. I want to write a script in python that will open up
> a windows dos program, send three inputs (file names) into program and
> then run it. I know one way to open up the dos program with
> os.system(r”c:\shake91.txt”) but cannot do the rest.
> 
> Use the subprocess module:
> 
> http://docs.python.org/library/subprocess.html
> 
> untested, but should work:
> subprocess.Popen([r'c:\shake91.txt', 'param1', 'paramN-1', 'paramN'])
> 
> if you want to communicate with the process you can add ,
> stdout=subprocess.PIPE, stdin=subprocess.PIPE) to the function call.
> 
> Check the docs for more info.
> 
> HTH,
> 
> Wayne
>>
>>
> Wayne,
> 
> It kindof works. I wrote
> subprocess.Popen([r'c:\shake91.exe', 'FLAC.txt', 'a.txt', 'b.txt'])
> 
> The dos program pops up and if I hit the enter key three times then it
> runs. How can I add these three “enters” into the script?

Then perhaps something more like this (untested) ...

from subprocess import Popen, PIPE
proc = Popen([r'c:\shake91.exe'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = proc.communicate('FLAC.txt\na.txt\nb.txt\n')

If that doesn't work you may need something like 'expect' for windows
(or, pexpect and cygwin).

HTH,
Marty




More information about the Tutor mailing list