跟踪Python程序

时间:2018-10-19 18:08:09

标签: python

我正在尝试跟踪python脚本的执行情况:

python -m trace --count nmt.nmt \
--src=de --tgt=en \
--ckpt=deen_gnmt_model_4_layer/translate.ckpt \
--hparams_path=nmt/standard_hparams/wmt16_gnmt_4_layer.json \
--out_dir=/tmp/deen_gnmt \
--vocab_prefix=/tmp/wmt16/vocab.bpe.32000 \
--inference_input_file=/tmp/wmt16/newstest2015.tok.bpe.32000.de \
--inference_output_file=/tmp/deen_gnmt/output_infer \
--inference_ref_file=/tmp/wmt16/newstest2015.tok.bpe.32000.en

但是,我收到nmt.nmt:无法运行文件'nmt.nmt',因为:[Errno 2]没有这样的文件或目录:'nmt.nmt'错误。当我执行跟踪命令时,它起作用了。有人对我为什么可以使用跟踪执行脚本有解决方案吗?

2 个答案:

答案 0 :(得分:0)

您的原始命令使用了python -m nmt.nmt ...,它告诉Python找到nmt.nmt模块并将其作为主脚本运行。

您的trace命令使用python -m trace ...,告诉Python运行trace模块作为主要脚本,并告诉trace运行文件nmt.nmt的em>作为主脚本。没有这样的文件; nmt.nmt模块对应于nmt.py某个位置的nmt目录中的sys.path文件,而不是nmt.nmt文件。

trace模块没有提供自己的python -m等效项;您不能告诉trace模块将另一个模块作为主要脚本运行并对其进行跟踪。一种解决方法是创建一个复制python -m的效果并进行跟踪的文件。我尚未对此进行测试:

# workaround.py
import runpy

runpy.run_module('nmt.nmt', run_name='__main__', alter_sys=True)

这将被追踪为python -m trace --count workaround.py ...

答案 1 :(得分:0)

通过运行以下一项或多项内容找出正在运行的程序包或模块的完整路径;

python -vm nmt.nmt |& grep nmt

输出应类似于;

import nmt # directory /home/user/src/nmt
import nmt # precompiled from /home/user/nmt/__init__.pyc
import nmt.nmt # directory /home/user/nmt/nmt

python -c 'import nmt.nmt;print(nmt.nmt.__file__)'
输出应该是您可以通过python -m trace --trace /home/user/nmt/nmt.py

跟踪的模块的绝对路径。

python -c 'import nmt.nmt;print(nmt.nmt.__path__)'
输出应该是您可以跟踪的目录的绝对路径 python -m trace --trace /home/user/nmt/nmt/__main__.py

因为带有__init__.py的目录可以由python -m运行,如果它们包含__main__.py