2009-07-31 11 views
6

Bir python komut dosyasının etkileşimli olarak çalıştırılıp çalıştırılmadığını otomatik olarak algılamanın bir yolu var mı? Alternatif olarak, ipython'un normal c python çalıştırılabilirliğine karşı kullanılmakta olup olmadığını tespit edebilir mi?Bir python komut dosyasının etkileşimli olarak ipython'da çalıştırılmasının algılanması

Arka plan: Python komut dosyalarının genellikle içinde çıkış() çağrısı vardır. Zaman zaman, genellikle ipython'da hata ayıklama ve profil oluşturma için komut dosyalarını etkileşimli olarak çalıştırıyorum. Etkileşimli olarak çalışırken, çıkmak için çağrıları bastırmak istiyorum.

Açıklama:

varsayalım ben var gibi görünen bir senaryo, myscript.py, Bazen

#!/usr/bin/python 
...do useful stuff... 
exit(exit_status) 

, ben zaten başlamış bir ipython oturum içinde komut dosyasını çalıştırmak istiyorum gibi söyleyerek bir şey: komut sonunda

In [nnn]: %run -p -D myscript.pstats myscript.py 

, çıkış() çağrısı bunun bir süre asmak için ipython neden olacaktır gerçekten çıkmak istiyorsam beni serseri. Bu, hata ayıklama yaparken küçük bir rahatsızlıktır (benim için çok küçük bir önem taşır), ancak profil sonuçlarını dağıtabilir: çıkış istemi, profil sonuçlarına dahil edilir (öğle yemeğine gitmeden önce bir profil oturumu başlatırsam analizi daha zor hale getirir) . interaktif çağrıldığında sadece o ortam değişkeni olabilir bu yüzden

#!/usr/bin/python 
...do useful stuff... 
if is_python_running_interactively(): 
    print "The exit_status was %d" % (exit_status,) 
else: 
    exit(exit_status) 

cevap

13

ayarlayan bir komut dosyası çağırmak ve benim için hileye neden olabilir:

def in_ipython(): 
    try: 
     __IPYTHON__ 
    except NameError: 
     return False 
    else: 
     return True 
+0

"python" ile aldığınız standart etkileşimli kabuk hakkında ne dersiniz? – n611x007

2

, piton, $ PYTHONSTARTUP komut dosyası yayınlanır:

Ne İsterdim benzediğini böylece benim komut dosyasını değiştirmek verir şeydir aşağıdaki üzerinde stumbed küresel

3

Dokümanlarsöylemek, etkileşimli olmayan modda mevcut değil. Ayrıca, python -i <whatever> kullanıp kullanmadığımızı saptamak için sys.flags (python 2.6+ için) kullanabilirsiniz. Biz olmayan interaktif ve (piton tercüman örtülü python -i kullanılarak denilen ve kullanıcı o "etkileşimli" konsoluna indi düşündüğü takdirde etkileşimli moda atfedilebilir) otopsi modunda, etkileşimli çalıştırırsanız

Bu komut

algılar:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 

# IPython recognition is missing; test here if __IPYTHON__ exists, etc. 

if hasattr(sys, 'ps1'): 
    print "Running interactively." 
else: 
    print "Not running interactively..." 
    if sys.flags.interactive: 
     print "... but I'm in interactive postmortem mode." 

IPython desteği, Bay Fooz tarafından açıklandığı gibi eklenebilir.

+0

PyCharm konsolunda bu yanlış. –

İlgili konular