19

I want to save result of script to file. Example of script:

#!/usr/bin/env python
i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

And I want to save to file print value. I know that I can do that in script f=open()..., but I want to do that using output in terminal. I read that I can use module subprocess but I don't know it is correct.

Sufian Latif
  • 13,086
  • 3
  • 33
  • 70
qwerty12345
  • 225
  • 1
  • 2
  • 9

3 Answers3

23

You can redirect the output to a file using > in terminal:

python your_script.py > output.txt
Sufian Latif
  • 13,086
  • 3
  • 33
  • 70
  • I don't like that you relay on shell =). – luk32 Apr 29 '14 at 12:19
  • 1
    IMO OP knows writing to file can be done with `open()`, but he wants to use `print` and not `write`. But I have to admit, it is quite unclear. Maybe he does not want to change his code at all, then best shot is to use terminal, or subprocess. – luk32 Apr 29 '14 at 12:25
21

IMO this is the correct pythonic way, with-out relying on the system shell:

import sys
f = open("test.out", 'w')
sys.stdout = f
print "test"
f.close()

In python you can change what is the default stdout object. You just need to assign whatever you want to sys.stdout. I think the object just need to have a write method defined (not absolutely sure, though).

This would do:

import sys
f = open("test.out", 'w')
sys.stdout = f

i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

f.close()

It's essentially the same what 0605002 suggests for systems that support syntax he uses, but realized in pure python and should be more portable.

Even more pythonic way, as per comment suggestion:

import sys

with open("test.out", 'w') as f:
  sys.stdout = f

  i=0
  while i<10:
    a=raw_input('Write a number')
    print 'Result%s'%str(2*a)
    i+=1

Of course you can refactor your "client code" and make it a function or something.

Community
  • 1
  • 1
luk32
  • 15,812
  • 38
  • 62
  • `with` statement not found!! :-) – Ashwini Chaudhary Apr 29 '14 at 12:35
  • @Aशwiniचhaudhary Yea I am not very good at python yet =(. But I did `f.close()`! =) I edited the question and added even more pythonic way. I hope everyone's content with the answer now. – luk32 Apr 29 '14 at 12:39
  • OK, it is works. Thanks. I have got one more question: Is it possibility to save the result of terminal according to below sample of code `import sys` `f = open("test.out", 'w')` `sys.stdout = f` `"on terminal execute some operation (due to run another script) and I save result from terminal to the file" ` `f.close()` – qwerty12345 Apr 29 '14 at 12:45
  • @qwerty12345 IMO, it's best to use subprocess for it. You can specify what will be used for `stdin`, `stdout` and `stderr`. You can look for "How can I run another script from python." there are several ways, and someone most probably already asked it. It is also possible to use `import` for this, I think. – luk32 Apr 29 '14 at 12:51
20
python file.py &> out.txt

This will direct all the output including the errors to the out.txt.

mohaghighat
  • 1,293
  • 17
  • 29