从外部库打印变量

时间:2019-04-17 10:29:20

标签: python

我有一个外部库。我们称它为ExtarnalLib。这个lib包含一个方法,我们称它为method_from_lib。此方法采用一个名为uri的变量。我自己的代码没有调用ExternalLib,因为它是从一个lib内的一个lib和另一个liber等中使用的代码。...

我想打印uri变量。

在python中这可能吗?如果是的话。

我有一种直觉,因为使用flexmock可以检查是否使用某些特定的args调用了特定模块中的特定函数。

类似的东西:

flexmock(distantLibModuleName.Nameclass).should_receive('methodName').with_args(the_args)

但是在我没有测试的情况下,我正在调试代码。通常,我只会使用pdb跟踪堆栈执行,但是我不能,因为我只在prod中遇到了这个问题,而且无法访问shell。

2 个答案:

答案 0 :(得分:1)

可能有一种更清洁的方法来执行此操作,但是我发现kubectl version --kubeconfig ~/.kube/config 应该可以执行您想要的操作。

示例目录结构:

inspect.stack

a.py

from b import another_function def inspect_me(inspect_this): another_function() inspect_me(inspect_this='hello')

b.py

from c import what_was_it def another_function(): what_was_it()

c.py

从外壳:

import inspect

result = None

def what_was_it():
    global result
    result = inspect.getouterframes(inspect.currentframe())

输出:

import a
import c
import os

[frame_data.code_context for frame_data in c.result if os.path.basename(frame_data.filename) == 'a.py']

然后您可以目视检查输出。

答案 1 :(得分:0)

假设您有mod.py,其中:

def x(uri):
    print("URI", uri)

然后调用mod2.py函数的mod.py:x

import mod

def y():
    print("Y")
    mod.x(123)

如果我们将其包装在主脚本中:

import mod
import mod2

def wrap(func):
    def wrapper(*args, **kwargs):
        print("PRE", *args, **kwargs)
        func(*args, **kwargs)
        print("POST")

    return wrapper

mod.x = wrap(mod.x)

mod2.y()

调用mod2.py:y将产生:

Y
PRE 123
URI 123
POST