Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何记录变量';谁的名字和价值?_Python_Variables_Logging - Fatal编程技术网

Python 如何记录变量';谁的名字和价值?

Python 如何记录变量';谁的名字和价值?,python,variables,logging,Python,Variables,Logging,我正在寻找一种在Unix命令行/ssh会话上快速开发/调试小型Python脚本的同时快速打印变量名和值的方法 这似乎是一个非常常见的要求,而且在打印或记录其值的每一行上复制变量\u names似乎是浪费(击键和时间/精力)。i、 e.而不是 print 'my_variable_name:', my_variable_name 我希望能够为,,,执行以下操作: 并获得以下输出: my_variable_name:some string i:10 my_string:a string of wo

我正在寻找一种在Unix命令行/ssh会话上快速开发/调试小型Python脚本的同时快速打印变量名和值的方法

这似乎是一个非常常见的要求,而且在打印或记录其值的每一行上复制
变量\u name
s似乎是浪费(击键和时间/精力)。i、 e.而不是

print 'my_variable_name:', my_variable_name
我希望能够为,,,执行以下操作:

并获得以下输出:

my_variable_name:some string
i:10
my_string:a string of words
my_list:[1, 2, 3]
理想情况下,输出还将记录函数名

我已经看到一些解决方案试图使用
局部变量
全局变量
、框架等,但我还没有看到适用于int、string、list和函数内部的解决方案


谢谢

我不知道如何简单地获取字符串变量的名称。 但是,您可以获得当前操作日志的参数列表

import inspect

def log(a):
    frame = inspect.currentframe()
    args, _, _, values = inspect.getargvalues(frame)
    print "%s:%s" % (args[0], values[args[0]])

下面是另一个邪恶的黑客:

import inspect

def log(a):
    call_line = inspect.stack()[1][4][0].strip()
    assert call_line.strip().startswith("log(")
    call_line = call_line[len("log("):][:-1]
    print "Log: %s = %s" % (call_line, a)

b=3
log(b)
这显然需要一些范围检查、更好的解析等。
如果调用总是以相同的方式进行,并且可能有更多(我不知道)假设…

如果您需要的工具仅用于开发和调试,则有一个有用的包调用

它已提交给pypi,可以使用
pip install q
easy\u install q
安装

import q; q(foo)

# use @q to trace a function's arguments and return value
@q
def bar():
   ...

# to start an interactive console at any point in your code:
q.d()
默认情况下,结果输出到文件/tmp/q(或任何自定义路径),因此它们不会与标准日志和普通日志混合。您可以使用
tail-f/tmp/q
检查输出。输出用不同的颜色高亮显示


作者在PyconUS 2013的闪电演讲中介绍了他的图书馆。视频从25:15开始。

听起来像一个宏…为什么不使用pdb:?邪恶的黑客:,任何好的文本编辑器都应该能够定义某种宏来生成一个简单的
print>>sys.stderr,“var={0}”。格式(var)
(或您选择的日志结构。感谢您对宏和pdb的建议。宏可能是最简单的答案。对于我正在运行的小脚本,我发现重新pdb更容易执行程序并让它自动报告其值。而不是在pdb中重复步进和查询。不。这不是他所要求的。@事实上,你是对的。这将永远打印“a”作为变量名…非常好的工具。我将来肯定会使用它,谢谢你指出。我个人更希望能够将输出发送到stdout,但q中可能有一个选项。@Sean我也希望将变量的名称和值发送到stdout。你找到方法了吗?
import q; q(foo)

# use @q to trace a function's arguments and return value
@q
def bar():
   ...

# to start an interactive console at any point in your code:
q.d()