How to redirect the output of print to a TXT file

python write output to text file
print output to file
python print to file
python script output to file
python 2.7 redirect print to file
python redirect stdout to file
print file outfile
python pipe text to file

I have searched Google, Stack Overflow and my Python users guide and have not found a simple, workable answer for the question.

I created a file c:\goat.txt on a Windows 7 x64 machine and am attempting to print "test" to the file. I have tried the following based on examples provided on StackOverflow:

At this point I don't want to use the log module since I don't understand from the documentation of to create a simple log based upon a binary condition. Print is simple however how to redirect the output is not obvious.

A simple, clear example that I can enter into my interperter is the most helpful.

Also, any suggestions for informational sites are appreciated (NOT pydocs).

import sys
print('test', file=open('C:\\goat.txt', 'w')) #fails
print(arg, file=open('fname', 'w')) # above based upon this
print>>destination, arg

print>> C:\\goat.txt, "test" # Fails based upon the above

If you're on Python 2.5 or earlier, open the file and then use the file object in your redirection:

log = open("c:\\goat.txt", "w")
print >>log, "test"

If you're on Python 2.6 or 2.7, you can use print as a function:

from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)

If you're on Python 3.0 or later, then you can omit the future import.

If you want to globally redirect your print statements, you can set sys.stdout:

import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")

The most obvious way to do this would be to print to a file object: with open('out.​txt', 'w') as f: print >> f, 'Filename:', filename # Python 2.x print('Filename:',  To redirect the output of a command to a text file instead of printing it to the screen in the command window, we simply need to execute the command and append it with the “>” angle bracket symbol—called, appropriately enough, a redirection.

To redirect output for all prints, you can do this:

import sys
with open('c:\\goat.txt', 'w') as f:
    sys.stdout = f
    print "test"

Instead, it sends text to a location called the standard output stream, also known as stdout . All UNIX systems have three main pipes - standard input pipe ( stdin ),​  To use the redirect command, just use the symbol > (press Shift + greater than arrow) and the file name at the end of the command you want to execute. For example to redirect output of the ipconfig command to the file tcpinfo.txt, enter the following command at the prompt: ipconfig /all > tcpinfo.txt

A slightly hackier way (that is different than the answers above, which are all valid) would be to just direct the output into a file via console.

So imagine you had main.py

if True:
    print "hello world"
else:
    print "goodbye world"

You can do

python main.py >> text.log

and then text.log will get all of the output.

This is handy if you already have a bunch of print statements and don't want to individually change them to print to a specific file. Just do it at the upper level and direct all prints to a file (only drawback is that you can only print to a single destination).

So if you have a bunch of text in there already it will add it to the end. > overwrites the whole file so it will just contain what you pipe into it. While there are several redirection operators, which you can read in detail about here, two, in particular, are used to output the results of a command to a file: the greater-than sign, >, and the double greater-than sign, >>.

Building on previous answers, I think it's a perfect use case for doing it (simple) context manager style:

import sys

class StdoutRedirection:
    """Standard output redirection context manager"""

    def __init__(self, path):
        self._path = path

    def __enter__(self):
        sys.stdout = open(self._path, mode="w")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = sys.__stdout__

and then:

with StdoutRedirection("path/to/file"):
    print("Hello world")

Also it would be really easy to add some functionality to StdoutRedirection class (e.g. a method that lets you change the path)

print(text). sys.stdout = original. print('This string goes to stdout, NOT the file!') if __name__ == '__main__':Redirecting stdout / stderr. test.bat 2> test.txt 1>&2. all give identical results. Redirect errors to a separate error log file: Run: test.bat > testlog.txt 2> testerrors.txt. and you'll get this text on screen (we'll never get rid of this line on screen, as it is sent to the Console and cannot be redirected): This text goes to the Console.

Usinge the file argument in the print function, you can have different files per print:

print('Redirect output to file', file=open('/tmp/example.log', 'w'))

I have just used file function in print to redirect my output. You can use file handling method to redirect. Please find below: def fun(a,b):. return a+b. fh=  In this example, save the output of date command to a file called output.txt: $ date > output.txt. Example: Running Unix/Linux command and saving output to a file. Please note that file-lists.txt file is created if it doesn’t exist. And if file file-lists.txt file is overwritten if it exits.

Yes it is possible, just redirect the output to a file: SomeCommand in a file use this: SomeCommand 2>&1 | tee SomeFile.txt 1039. To write the output of a command to a file, there are basically 10 commonly used ways. If you're on Python 2.5 or earlier, open the file and then use the file object in your redirection: log = open("c:\\goat.txt", "w") print >>log, "test" If you're on Python 2.6 or 2.7, you can use print as a function:

txt"]; AppendTo[$Output, stream]; (* run your file here *) Close[stream]; $Output = Most[$Output];. Since Print by default outputs to stdout, you could also pipe the  Unlike the general Set-Content cmdlet that's purpose is a universal cmdlet to create or overwrite a file at any point in a script, the Out-File PowerShell cmdlet was designed to replace the standard output redirection operator (>). Even from the DOS days, we could redirect output to a file. This cmdlet is the PowerShell way to do it. Basic Out-File Usage

I am trying to print output on the terminal and redirect the same to '.txt' file by using the following command. $ python file.py | tee output.txt.

Comments
  • Also, What tutorial are you using? "searched for hours with no result " should be replaced by "did the tutorial for hours". Have you cracked open any tutorial? If so, which one?
  • Importing this print function makes my other print statements error out. print "Starting LfD..." ^ SyntaxError: invalid syntax
  • @BenBlumer: That's a good point; you should only do the future import of the print function in a file where you're willing to convert ALL of your print statements to function calls.
  • To reset back to stdout, use the code: sys.stdout = sys.__stdout__
  • Actually, in 3.0 or later, you can supply the file as a keyword arg: with open('myfile','w') as f: print("my example", file=f)
  • Afterwards you can set set stdout back to original state with: sys.stdout = sys.__stdout__
  • its better to re assign sys.stdout its default value as mentioned here stackoverflow.com/a/7152903/1054978
  • So in addition to this I added a "before launch" script in the run configuration from PyCharm which copies the content of text.log/output.log to a file "concatenated_output.log" before python overwrites the old text.log/output.log. This way you have a working history log (the logging package did not work in my case). tip: Make sure you print the date+time somewhere in your output
  • When I run "sys.stdout = filename", the program freezes, not sure what is going wrong.
  • perhaps stdout must be assigned to the buffer's pointer itself instead of to a reference.
  • Don't try to reassign sys.stdout if you are interactively typing into the python interpreter, because you'll no longer see any output from the interpreter. Because it uses stdout. Also - don't saw off any branches you are sitting on. :-)