I would like to print the output of python to both console and a textfile including errors, if any.
So far my attempts are these:
Using console:
# mystdout.py # note that it has missing ) sign print("hello # in the terminal: chmod a+x mystdout.py; ./mystdout.py 2>&1 | tee output.txt # does not print to oputut.txt if mystout.py has syntax errors Print to file (python3):
with open('out.txt', 'a') as f: print('hello world', file=f) # this does not print to console, only to the file Defining a class called "Tee"
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author : Bhishan Poudel # Date : Jul 12, 2016 # Imports import sys import subprocess ##============================================================================= class Tee(object): def __init__(self, *files): self.files = files def write(self, obj): for f in self.files: f.write(obj) f.flush() def flush(self) : for f in self.files: f.flush() f = open('out.txt', 'w') original = sys.stdout sys.stdout = Tee(sys.stdout, f) ##============================================================================= print('This works good, prints all the output to both console and to a file') print("This does not print output to file in case of syntax errors") print("This does not print output of subprocess.call") Question Suppose I have an executable (from C program that prints hello)
subprocess.call('./hello') # How to print output of this executable to both console and outputfile? Note: Code to produce executable hello
// gcc -o hello hello.c #include<stdio.h> int main() { printf("hello\n"); return 0; } Related links:
How to redirect 'print' output to a file using python?
http://linux.byexamples.com/archives/349/how-to-redirect-output-to-a-file-as-well-as-display-it-out/
Output on the console and file using python
mystdout.pyscript in this question does not have one. The appropriate one to use depends on your environment configuration.