如何将代码文件和终端输出重定向到同一个输出文件(模拟 python repl)?
how to I redirect both code file and terminal output to the same output file (simulating python repl)?
我想将输入代码和输出结果保存到一个文件中。例如下面的 python 代码 code.py
:
print(2+2)
print(3+2)
创建 code-and-output.txt
:
>>> print(2+2)
4
>>> print(3+2)
5
但我无法让它工作。基本上,我想 code-and-output.txt
捕捉如果我 运行 在 python 交互环境(代码 + 输出)中解释 python 和 运行 语句会发生什么。
到目前为止我尝试过的方法:
重定向标准输出:
python code.py > code-and-output.txt
它只保存输出。
重定向标准输出和标准输入:
python < code.py > code-and-output.txt
它做同样的事情(只输出)。
nohup
nohup python code.py
同样的问题:只输出.
脚本
script -q code-and-output.txt
python
print(2+2)
print(2+3)
ctr+d
ctr+d
它可以工作,但我需要手动完成。此外,它节省了一些我无法使用 -q 使它们安静的垃圾。
Bash 脚本
# bash-file.sh
python &
print(2+2)
print(2+3)
不起作用:控制台 bash 中的命令 运行,而不是 python。它也不适用于 &
:永远不会结束 python repl.
使用 tty
打开另一个终端,如/dev/pts/2
并在bash-file.sh
上方发送
cat bash-file.sh > /dev/pts/2
只是复制而不是运行。
我对 Jupyter 和 iPython 等解决方案不感兴趣。他们有自己的问题,没有解决我的要求。
任何通过 linux 命令(最好)或 python 的解决方案?谢谢。
将其另存为 repl_sim.py
在与 code.py
相同的目录中:
with open("code.py", 'r') as input_file:
for line in input_file:
print(f">>> {line.strip()}")
eval(line)
然后 运行 在您的终端中使用以下命令将输出重定向到名为 code-and-output.txt
的文本文件:
python repl_sim.py > code-and-output.txt
-或-
然后 运行 在您的终端中使用以下命令查看输出以及使文本文件匹配:
python repl_sim.py | tee code-and-output.txt
它至少适用于您提供的示例 code.py
。
上面第一个选项的纯 Python 版本,这样你就不需要 shell 重定向。
将此代码保存为 repl_sim.py
:
import contextlib
with open('code-and-output.txt', 'w') as f:
with contextlib.redirect_stdout(f):
with open("code.py", 'r') as input_file:
for line in input_file:
print(f">>> {line.strip()}")
eval(line)
然后 运行 在您的终端中使用:
python repl_sim.py
这将导致 code-and-output.txt
包含您想要的内容。
Contextlib 使用基于 Raymond Hettinger's August 17th 2018 Tweet 和 contextlib.redirect_stdout() 文档
.
我想将输入代码和输出结果保存到一个文件中。例如下面的 python 代码 code.py
:
print(2+2)
print(3+2)
创建 code-and-output.txt
:
>>> print(2+2)
4
>>> print(3+2)
5
但我无法让它工作。基本上,我想 code-and-output.txt
捕捉如果我 运行 在 python 交互环境(代码 + 输出)中解释 python 和 运行 语句会发生什么。
到目前为止我尝试过的方法:
重定向标准输出:
python code.py > code-and-output.txt
它只保存输出。
重定向标准输出和标准输入:
python < code.py > code-and-output.txt
它做同样的事情(只输出)。
nohup
nohup python code.py
同样的问题:只输出.
脚本
script -q code-and-output.txt
python
print(2+2)
print(2+3)
ctr+d
ctr+d
它可以工作,但我需要手动完成。此外,它节省了一些我无法使用 -q 使它们安静的垃圾。
Bash 脚本
# bash-file.sh
python &
print(2+2)
print(2+3)
不起作用:控制台 bash 中的命令 运行,而不是 python。它也不适用于 &
:永远不会结束 python repl.
使用 tty
打开另一个终端,如/dev/pts/2
并在bash-file.sh
cat bash-file.sh > /dev/pts/2
只是复制而不是运行。
我对 Jupyter 和 iPython 等解决方案不感兴趣。他们有自己的问题,没有解决我的要求。
任何通过 linux 命令(最好)或 python 的解决方案?谢谢。
将其另存为 repl_sim.py
在与 code.py
相同的目录中:
with open("code.py", 'r') as input_file:
for line in input_file:
print(f">>> {line.strip()}")
eval(line)
然后 运行 在您的终端中使用以下命令将输出重定向到名为 code-and-output.txt
的文本文件:
python repl_sim.py > code-and-output.txt
-或-
然后 运行 在您的终端中使用以下命令查看输出以及使文本文件匹配:
python repl_sim.py | tee code-and-output.txt
它至少适用于您提供的示例 code.py
。
上面第一个选项的纯 Python 版本,这样你就不需要 shell 重定向。
将此代码保存为 repl_sim.py
:
import contextlib
with open('code-and-output.txt', 'w') as f:
with contextlib.redirect_stdout(f):
with open("code.py", 'r') as input_file:
for line in input_file:
print(f">>> {line.strip()}")
eval(line)
然后 运行 在您的终端中使用:
python repl_sim.py
这将导致 code-and-output.txt
包含您想要的内容。
Contextlib 使用基于 Raymond Hettinger's August 17th 2018 Tweet 和 contextlib.redirect_stdout() 文档 .