问题
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!
回答1:
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.
回答2:
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)
回答3:
Its better to use subprocess module that os.system
import subprocess
subprocess.call(['pdv', '-t', filename, '>', dest_file_name])
回答4:
from subprocess import Popen
proc = Popen(['pdv', '-t', epoch_name], stdout = open('123.txt', 'w'))
回答5:
See if the command script
is available to you. It might do what you need.
回答6:
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