2014-09-04 22 views

cevap

7

Çözümümün Brian Cain'in cevap dayanmaktadır:

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

Benim Virtualenv $ HOME doğrudan ve benim kod $ HOME/src düzenlenebilir yüklenir.

Python kodunda ascii olmayan karakterler varsa UnicodeErrors aldığım için bu PYTHONIOENCODING=utf-8; bu gereklidir. Eğer sanal ortamda ya da daha ezoterik senaryoda ya değilse göz ardı edebilirsiniz Bu şekilde

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

: Eğer bash komut dosyası çalıştırıyorsanız

3

the documentation gibi devletler, programlama yoluyla trace kullanabilirsiniz:

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=".") 

Not trace.Trace için argüman.

Sadece src numaralı dosyanızın içerdiği dosyaları açıkça içermenin bir yolu görünmüyorsa da, pratik amaçlar için aynı olması gereken tüm sistem paketlerini hariç tutabilirsiniz.

+0

Bu çözüm bir dosyaya sonuçları göndermek düşündüm, ama aslında, her zaman virtualenv kullanıyorum, harika bir –

2

Ben çıkışı

hiçbir beyaz liste filtresi var azaltmak istiyoruz ama bir kara liste vardır:

ignore_module:

--ignore modüllü = her Ignore Verilen modül isimleri ve alt modülleri (eğer bir paket ise). Argüman, virgülle ayrılmış adlarının bir listesi olabilir.

4

gibi bir şey kullanabilirsiniz.

+0

ben basmak için yazdırıyor, benim için ezoterik değil :-) ama çözüm, nasıl yapılacağını iyi bir ipucu. Teşekkür ederim. – guettli

+0

Katılıyorum, 'ezoterik' sadece diğer senaryolar içindi :-). – mop

+0

Bu işe yarar, ama sen demek istedin (sys.path [1:]) 'Bence :-) –