yang5
yang5

Reputation: 1235

Capture interactive Python shell output along with input

I want to capture the Python shell output along with the input sent to it. For example, in the following use case, help() should also be present in Line 4 of capture.log:

$ echo "help()" | python3 -i > capture.log   2>&1
$ cat capture.log
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Welcome to Python 3.4's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.4/tutorial/.
....
....

Upvotes: 5

Views: 1426

Answers (1)

Lex Scarisbrick
Lex Scarisbrick

Reputation: 1570

Assuming a Unix-like environment, you can capture all tty input and output with the script command:

$ script capture.log
Script started, output file is capture.log
$ python3
# python interactive session here
$ exit
Script done, output file is capture.log
$ cat capture.log
Script started on Thu Aug 18 21:21:55 2016
$ python3
Python 3.5.2 (default, Jul 21 2016, 07:25:19) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> help()

Welcome to Python 3.5's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.5/tutorial/.

....
....
>>> ^D
$ exit

Script done on Thu Aug 18 21:22:06 2016

If, as in the question example, Python is driven completely by stdin pipe and the goal is to capture the pipe input and Python output, you can get close by using the tee command:

$ echo "help()" | tee capture.log | python3 -i >> capture.log 2>&1
$ cat capture.log 
help()
Python 3.5.2 (default, Jul 21 2016, 07:25:19) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Welcome to Python 3.5's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.5/tutorial/.
....
....

As you can see, the input and output are both captured, but they're not aligned.

Upvotes: 5

Related Questions