我正在跟踪这样的python脚本:
import java.util.*;
public class So {
public static void searchForNumbers(int[] sourceArray) {
System.out.println("source array = " + Arrays.toString(sourceArray));
List<Integer> ai = new ArrayList<>();
for (int i = 0; i < sourceArray.length; i++) {
if( Integer.toString(sourceArray[i]).matches(".*[1-3].*")) {
ai.add(sourceArray[i]);
}
}
if (ai.isEmpty()) {
System.out.println(-1);
} else {
ai.sort(Comparator.naturalOrder());
System.out.println(ai);
}
}
public static void main(String[] args) {
Scanner mew = new Scanner(System.in);
int numberOfTimesToAskForNumbers = mew.nextInt();
System.out.println("numberOfTimesToAskForNumbers = " + numberOfTimesToAskForNumbers);
for (int i = 0; i < numberOfTimesToAskForNumbers; i++) {
int amountOfNumbersInThisRound = mew.nextInt();
System.out.println("amountOfNumbersInThisRound = " + amountOfNumbersInThisRound);
int a[] = new int[amountOfNumbersInThisRound];
for (int j = 0; j < amountOfNumbersInThisRound; j++) {
a[j] = mew.nextInt();
System.out.println("a[j] = " + a[j]);
}
searchForNumbers(a);
}
}
}
有些行看起来像这样:
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py
不幸的是,我不知道这段代码的来源。
有没有办法查看 --- modulename: __init__, funcname: getEffectiveLevel
__init__.py(1325): logger = self
__init__.py(1326): while logger:
__init__.py(1327): if logger.level:
__init__.py(1329): logger = logger.parent
__init__.py(1326): while logger:
__init__.py(1327): if logger.level:
__init__.py(1328): return logger.level
的文件名(包括路径)?
当然,我可以在所有已安装的python代码中搜索具有此名称的方法,但我希望立即查看文件路径。
在此上下文中使用 Python 2.7 。
我没有修复标准库&#34; trace&#34;。如果它提供了所需的功能,我可以使用不同的库。
答案 0 :(得分:3)
如果目的是找到完整路径,然后检查hunter项目,它甚至支持query-style跟踪。
# a modified example from docs
# do check the documentation it is easy to start with
from hunter import trace, Q, Debugger
from pdb import Pdb
trace(
# drop into a Pdb session on``myscript.mainMethod()`` call
Q(module="myscript", function="getEffectiveLevel", kind="call", action=Debugger(klass=Pdb)))
import myscript
myscript.mainMethod()
答案 1 :(得分:0)
不幸的是,没有标志/命令行选项来启用它。因此,立即(可能是正确的)答案是:否。
如果您对使用内置库感到困惑,可以通过更改以下行来轻松实现:
print (" --- modulename: %s, funcname: %s"
% (modulename, code.co_name))
使用:
print ("filename: %s, modulename: %s, funcname: %s"
% (filename, modulename, code.co_name))
在Python安装的trace.py
文件中。您可以使用以下命令找到该文件的路径:
>>> import trace
>>> trace.__file__
但我真的不想建议以这种方式修改库是我推荐的。在您执行此操作之前(如果您确定要这样做),请创建该文件的备份,如果可能,请在完成后再次替换它。
更好的方法(尽管仍然很混乱)是复制上面提到的trace.py
文件(例如复制到当前工作目录中)并修改复制的文件。然后您可以运行修改后的版本:
python path_to_modified_trace_file your_options_for_trace
没有-m
选项和修改后的路径,但与原始路径完全相同。
答案 2 :(得分:0)
您可以使用以下内容
创建trace2.py
文件
from trace import Trace, main
original_globaltrace_lt = Trace.globaltrace_lt
def patch_Trace_globaltrace_lt(self, frame, why, arg):
value = original_globaltrace_lt(self, frame, why, arg)
if value:
filename = frame.f_globals.get('__file__', "")
print("The code is in file - %s" % (filename))
return value
Trace.globaltrace_lt = patch_Trace_globaltrace_lt
if __name__ == "__main__":
main()
然后像下面那样运行
python -m trace2 --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py
输出结果很详细,但您可以根据需要更改功能patch_Trace_globaltrace_lt