2014-09-04 14 views
10

tôi biết rằng tôi có thể sử dụng để theo dõi việc thực hiện lệnh:dấu vết python: chỉ bao gồm một số tác phẩm

python -m trace -t script.py 

Nhưng tôi muốn giảm bớt đầu ra: Chỉ những tập tin đó là trong src của tôi/(PIP cài đặt - e ...) sẽ được hiển thị.

Tôi làm cách nào để thực hiện việc này?

Trả lời

7

Giải pháp của tôi được dựa trên câu trả lời của Brian Cain:

export PYTHONIOENCODING=utf-8 
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t script.py 

virtualenv của tôi là trực tiếp trong $ HOME và mã của tôi được cài đặt có thể chỉnh sửa trong $ HOME/src.

Điều này PYTHONIOENCODING=utf-8; là cần thiết vì tôi đã nhận UnicodeErrors nếu có không có ký tự ascii trong mã python.

3

Như the documentation tiểu bang, bạn có thể sử dụng trace programatically:

import sys 
import trace 

# create a Trace object, telling it what to ignore, and whether to 
# do tracing or line-counting or both. 
tracer = trace.Trace(
    ignoredirs=[sys.prefix, sys.exec_prefix], 
    trace=0, 
    count=1) 

# run the new command using the given tracer 
tracer.run('main()') 

# make a report, placing output in the current directory 
r = tracer.results() 
r.write_results(show_missing=True, coverdir=".") 

Lưu ý lập luận để trace.Trace.

Mặc dù dường như không có cách nào để chỉ bao gồm các tệp trong src của bạn một cách rõ ràng, bạn có thể loại trừ tất cả các gói hệ thống, trong đó, cho các mục đích thực tế, phải giống nhau.

+0

Tôi nghĩ giải pháp này gửi kết quả đến một tệp, nhưng nó thực sự in thành stdout, tuyệt vời –

2

tôi muốn giảm bớt sản lượng

Không có bộ lọc danh sách trắng, nhưng có một danh sách đen:

ignore_module:

--ignore-mô-đun = Bỏ qua mỗi các tên module và mô-đun con của nó (nếu nó là một gói). Đối số có thể là danh sách các tên được phân tách bằng dấu phẩy.

4

Nếu bạn đang chạy script từ bash bạn có thể sử dụng một cái gì đó như:

python -m trace --ignore-dir=$(python -c 'import sys ; print ":".join(sys.path)[1:]') -t ./script.py 

Bằng cách này bạn có thể bỏ qua nếu bạn là hay không trong một môi trường ảo hoặc một kịch bản nhiều bí ẩn khác.

+0

Tôi luôn sử dụng virtualenv, đối với tôi nó không phải là bí truyền :-) nhưng giải pháp của bạn là một gợi ý tốt về cách thực hiện. Cảm ơn bạn. – guettli

+0

Tôi đồng ý, 'bí truyền' chỉ dành cho các trường hợp khác :-). – mop

+0

Điều này làm việc, nhưng bạn có nghĩa là 'tham gia (sys.path [1:])' Tôi nghĩ :-) –

Các vấn đề liên quan