On my machine, I have some software which takes commands in the terminal and returns a list of values.
To run it, I have to type something like:
pdv -t filename
I am trying to run it as part of a python programme. When I run the following:
os.system('pdv -t %s' % (epoch_name))
then I get the values that I desire returned to my terminal (where epoch_name is the variable name for the filename). But when I try to write the result to a file:
os.system('pdv -t %s % "(epoch_name)" > 123.txt')
the file 123.txt is produced but it is empty.
I know that I am misplacing the " and/or ' characters, but I can't figure out where they should go.
Any help would be gratefully received!
I believe this does what you want. Argument to os.system()
should be a string representing command to the OS.
os.system('pdv -t %s > 123.txt' % epoch_name)
There is subprocess
module, which may worth look into if you are planning to process the output further in python.
You can use subprocess.call, with the stdout keyword argument:
import subprocess
cmd = ['ls', '-l']
with open('output.txt', 'w') as out:
return_code = subprocess.call(cmd, stdout=out)
Its better to use subprocess module that os.system
import subprocess
subprocess.call(['pdv', '-t', filename, '>', dest_file_name])
from subprocess import Popen
proc = Popen(['pdv', '-t', epoch_name], stdout = open('123.txt', 'w'))
See if the command script
is available to you. It might do what you need.
Or you can use sys.stdout
check this document from DiveIntoPython or the discussion here if it helps you out.
import sys
print 'Dive in'
saveout = sys.stdout
fsock = open('out.log', 'w')
sys.stdout = fsock
print 'This message will be logged instead of displayed'
sys.stdout = saveout
fsock.close()
来源:https://stackoverflow.com/questions/12292594/writing-terminal-output-to-file