如何运行Python脚本并在控制台回显每行执行的命令
如何运行Python脚本并在控制台回显每行执行的命令
我之前也刚好遇到过一模一样的需求——想让脚本运行时,像在Python交互式环境里那样,先把要执行的代码行显示出来,再输出运行结果。给你分享两个简单好用的方法,看你哪种顺手:
方法一:用Python自带的trace模块(无需额外写脚本)
Python自带的trace模块本来是用来跟踪代码执行流程的,稍微处理下输出就能完美匹配你的需求,完全不用额外写代码。
操作步骤:
直接在控制台敲下面的命令就行:
python -m trace -t myscript.py | grep -v "^\---" | sed 's/.*(.*): /> /'
输出效果:
> print("Hello") Hello > a = 4 > print(f"{a=}") a=4
简单解释下命令各部分的作用:
python -m trace -t myscript.py:调用trace模块跟踪脚本的每一行执行,会输出每行代码的位置和内容grep -v "^\---":过滤掉trace模块自带的多余分割线(比如--- modulename: myscript, funcname: <module>这类没用的内容)sed 's/.*(.*): /> /':把trace输出的myscript.py(1): print("Hello")格式,替换成你想要的> print("Hello")样式
如果你用的是Windows系统(没有grep和sed),可以用PowerShell的替代命令:
python -m trace -t myscript.py | Where-Object { $_ -notlike "---*" } | ForEach-Object { $_ -replace '.*\(.*\): ', '> ' }
方法二:自己写个小包装脚本(更灵活)
如果不想折腾命令行管道,或者需要定制输出格式,写个简单的包装脚本会更方便,还能自己调整细节。
操作步骤:
- 新建一个叫
run_with_echo.py的文件,内容如下:
import sys # 检查输入参数是否正确 if len(sys.argv) != 2: print("用法:python run_with_echo.py <你的脚本文件名>") sys.exit(1) script_path = sys.argv[1] # 读取目标脚本的所有行,自动过滤空行 with open(script_path, 'r', encoding='utf-8') as f: script_lines = [line.rstrip('\n') for line in f if line.strip()] # 逐行打印代码并执行 for line in script_lines: print(f"> {line}") exec(line)
- 然后在控制台运行你的脚本:
python run_with_echo.py myscript.py
- 直接就能得到你想要的输出效果。
小提醒:
这个方法用了exec()函数,只适合运行你自己写的、安全可靠的脚本,别用来执行未知来源的代码哦。另外如果你的脚本里有多行代码块(比如if判断、函数定义),逐行执行可能会出问题,这时候用trace模块的方法会更靠谱,它能正确识别代码块的执行逻辑。




