That's quite easy to interact with the shell from within python, it only needs to import the subprocess module.
If the matter is just executing a command, use the call method:
>>>>subprocess.call('ls')
Applications SharedLin Volumes etc mach_kernel sbin var
Developer SharedXP bin home net sw
Library System cores iraf opt tmp
Network Users dev lost+found private usr
If some arguments need to be used, you cannot put them in the same string as the command, need to use:
>>>>subprocess.call(['ls','-l'])
total 40733
drwxrwxr-x+ 134 root admin 4556 28 jui 00:21 Applications
drwxrwxr-x@ 18 root admin 612 18 mar 20:03 Developer
[...]
or you'll need to execute the command in a shell:
>>>>subprocess.call('ls -l', shell=True)
If one want to deal with the output, use the Popen and communicate methods :
>>>>ls = subprocess.Popen(["ls"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>>>stdout, stderr = ls.communicate()
You can access the distinct values of the stdout by splitting them:
stdout.split()
Now, one can need to execute the command with a givenfile as input and redirect the output to another file.
That's possible using the Popen method:
input_file = open('model.in','r')
output_file = open('model.out','wb')
p = subprocess.Popen('cloudy.exe', stdout=output_file, stdin = input_file)
input_file.close()
output_file.close()
That's it!
References:
http://docs.python.org/library/subprocess.html
http://jimmyg.org/blog/2009/working-with-python-subprocess.html
Aucun commentaire:
Enregistrer un commentaire