代码追踪
安装
linux
yum install gdb
pip install lptrace
windows
C:/Python37/python.exe -m pip install lptrace
详细追踪
python -m trace --trace for.py
显示调用了那些函数
python -m trace --tracecalls for.py
debug调试
除了 print打断点
还可以通过pdb,ipdb的方法在有问题的代码处打断点
使用pycodestyle检查代码规范 ,autopep8 将代码格式化
(venv) [root@node-1 test]# cat a.py
import os, sys
def main():
print(item for item in os.listdir('.') if item.endswith('.py'));
print(sys.version)
if __name__ == '__main__':
main()
(venv) [root@node-1 test]# pycodestyle a.py
a.py:1:10: E401 multiple imports on one line
a.py:3:1: E302 expected 2 blank lines, found 1
a.py:4:68: E703 statement ends with a semicolon
a.py:7:1: E305 expected 2 blank lines after class or function definition, found 1
(venv) [root@node-1 test]# autopep8 a.py
import os
import sys
def main():
print(item for item in os.listdir('.') if item.endswith('.py'))
print(sys.version)
if __name__ == '__main__':
main()
(venv) [root@node-1 test]# python a.py
<generator object main.<locals>.<genexpr> at 0x7f001cd82850>
3.7.9 (default, Feb 14 2023, 10:55:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
判断文件是否存在
(venv) [root@node-1 test]# autopep8 test_argv.py
from __future__ import print_function
import sys
def main():
sys.argv.append("")
filename = sys.argv[1]
if not os.path.isfile(filename):
raise SystemExit(filename + ' does not exists')
elif not os.access(filename, os.R_OK):
raise SystemExit(filename + ' is not accessible')
else:
print(filename + ' is accessible')
if __name__ == '__main__':
main()
(venv) [root@node-1 test]# python test_argv.py 111
111 does not exists
(venv) [root@node-1 test]# ls
a.py test_argv.py
(venv) [root@node-1 test]# python test_argv.py a.py
a.py is accessible
stdin 标准输入
stdout 标准输出
stderr 错误输出
(venv) [root@node-1 test]# cat read_stdin.py
from __future__ import print_function
import sys
for line in sys.stdin:
print(line, end="")
(venv) [root@node-1 test]# cat /etc/passwd | python read_stdin.py
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin