我不在编程领域,但最近我对Python感兴趣。我正在编写一些函数但是为了调试我需要查看正在运行的命令。例如:
def foo():
for i in xrange(0,5):
a = 1 + i
是否可以进行解释器输出
>>> for i in xrange(0,5)
>>> a = 1 + 0
>>> a = 1 + 1
>>> a = 1 + 2
>>> a = 1 + 3
>>> a = 1 + 4
有关
>>> foo()
或者至少写一个文件发生了什么?我在过去做了一些脚本,我记得在DOS下可以使用@ECHO ON或其他东西。我做了一些阅读,我觉得它与Python中的stdin和stdout有关所以我试过
import sys
def foo():
for i in xrange(0,5):
a = 1 + i
sys.stdin.flush()
sys.stdout.flush()
但我什么也没得到......我也试过了
import sys
# foo()
sys.stdin.read()
sys.stdout.read()
和https://stackoverflow.com/a/3289051/2032568,但它只是挂起。对不起,如果这不适合初学者。我找不到任何能回答我问题的东西。
答案 0 :(得分:4)
要使解释器在运行时打印出表达式值,您可以使用print语句。另请注意Python的string formatting facilities。
示例:
for i in xrange(0,5):
a = 1 + i
# print the value of a:
print "the current value of variable 'a':", a
除非您想强制打印没有终止换行符的行,否则无需显式刷新stdout:
import sys
import time
for i in xrange(0,5):
a = 1 + i
# print the value of a:
# the trailing comma prevents 'print' from adding a newline
print "\rthe current value of variable 'a':", a,
sys.stdout.flush()
# short pause for purposes of demonstration
time.sleep(1)
# finally print a newline
print
要在执行之前打印每个语句,请查看trace模块。
示例:
y = 0
for xi in range(3):
y += xi
print y
输出:
$ python -m trace -t tt.py
--- modulename: tt, funcname: <module>
tt.py(2): y = 0
tt.py(3): for xi in range(3):
tt.py(4): y += xi
tt.py(3): for xi in range(3):
tt.py(4): y += xi
tt.py(3): for xi in range(3):
tt.py(4): y += xi
tt.py(3): for xi in range(3):
tt.py(5): print y
3
--- modulename: trace, funcname: _unsettrace
trace.py(80): sys.settrace(None)
您首先要查找的内容也可能是调试器,例如pdb。您将获得一个交互式会话,您可以在其中单步执行代码,并以交互方式查看数据。
示例:
$ python -m pdb tt.py
> /home/moooeeeep/tt.py(2)<module>()
-> y = 0
(Pdb) n
> /home/moooeeeep/tt.py(3)<module>()
-> for xi in range(3):
(Pdb) n
> /home/moooeeeep/tt.py(4)<module>()
-> y += xi
(Pdb) n
> /home/moooeeeep/tt.py(3)<module>()
-> for xi in range(3):
(Pdb) n
> /home/moooeeeep/tt.py(4)<module>()
-> y += xi
(Pdb) print y, xi
0 1
(Pdb)
...
大多数Python IDE(例如PyDev)具有很好的集成调试功能。所以我的建议是:去拿一个调试器。
答案 1 :(得分:3)
python -m trace --count -C . somefile.py
输出放在currebt目录中:
$ cat somefile.trace
1: def foo():
6: for i in xrange(5):
5: a = 1 + i
1: foo()
-c, - count 程序完成时生成一组带注释的列表文件,显示每个语句执行的次数
如果使用-t
选项,您可以获得:
$ python -m trace --count -t tr.py
--- modulename: tr, funcname: <module>
tr.py(1): def foo():
tr.py(5): foo()
--- modulename: tr, funcname: foo
tr.py(2): for i in xrange(5):
tr.py(3): a = 1 + i
tr.py(2): for i in xrange(5):
tr.py(3): a = 1 + i
tr.py(2): for i in xrange(5):
tr.py(3): a = 1 + i
tr.py(2): for i in xrange(5):
tr.py(3): a = 1 + i
tr.py(2): for i in xrange(5):
tr.py(3): a = 1 + i
tr.py(2): for i in xrange(5):
答案 2 :(得分:1)
你的意思是这样的吗?
def foo():
for i in xrange(0,5):
a = 1 + i
print "a = 1 + {0}".format(i)
>>> foo()
a = 1 + 0
a = 1 + 1
a = 1 + 2
a = 1 + 3
a = 1 + 4
答案 3 :(得分:0)
def foo():
for i in xrange(0,5):
a = 1 + i
print a
我认为这就是你要找的东西,我希望这对你有用:)
编辑:
我想我理解你想要的东西:
def foo():
for i in xrange(0,5):
print "a = 1 + i"
答案 4 :(得分:0)
我明白你在这里要做什么,我检查了那个链接:它也挂了我,只在终端重复输入的文字。不幸的是我不知道如何打印脚本,因为你曾经问过:为了调试,我建议只使用简单的打印命令来确定正在执行的部分。
def foo():
for i in xrange(0,5):
a = 1 + i, print "line is being executed where i = %i " % i
然后只需阅读打印的文本输出即可查看程序正在执行的操作。 希望这会有所帮助。