我有一个外部库。我们称它为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。
答案 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