2009-05-09 17 views
5

Farklı işletim sistemi ortamlarında (Windows/* nix) çalıştırılabilen bir Python komut dosyası yazılırken, bir yolu ayarlamanın iyi yolları nelerdir? ? Aşağıdaki örnekte, günlük dosyalarını geçerli dizinin altındaki günlükler klasöründe saklamak istiyorum. Bu kabul edilebilir bir yaklaşım mı (Python için oldukça yeni) ya da bunu başarmanın daha iyi yolları var mı? TeşekkürlerÇoklu İşletim Sistemi tarafından desteklenen bir Python komut dosyasında yol belirlemenin bazı iyi yolları nelerdir

if os.name == 'nt': 
    logdir=('%s\\logs\\') % (os.getcwd()) 
else: 
    logdir=('%s/logs/') % (os.getcwd()) 

logging.basicConfig(level=logging.INFO, 
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
    datefmt='%m-%d-%y %H:%M:%S', 
    filename='%slogfile.log' % (logdir), 
    filemode='a') 
+1

MS OS'lerin, uzun bir süre için yol ayırıcı olarak eğik çizgiyi kabul ettiğini unutmayın (bu, onunla birlikte verilen komut satırlarıdır). "/" ayrıca OS X üzerinde de çalışır. OpenVMS hakkında bilmiyorum. En taşınabilir yaklaşım, Ryan'ın tüm işletim sistemlerinde çalışacağından bahsetti. – outis

cevap

8

os.path'a kesinlikle bakın. İhtiyacınız olan "güvenli" çapraz-işletim yolu manipülasyon fonksiyonlarının çoğunu içerir.

os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logs') 

Ayrıca yol ayırıcısı almak istiyorsanız, kullanmak unutmayın:

os.path.sep 

Bu verecektir Örneğin, ben her zaman özetleyen ediyoruz senaryosunda yaptık Örneğin, Windows'ta '\\' ve Linux'ta '/'.

+0

Teşekkürler Ryan. Tavsiyenize dayanarak aşağıdakileri tamamladım: os.path.join (os.path.abspath (os.path.dirname (__ scriptname__)), 'günlükler') + (os.sep) Bu, yolun sonunda doğru eğik çizgi ile uygun yol. – Shaun

+0

Yardım etmekten memnun oldum! :-) –

2

İlk olarak, yol işleme için her zaman os.path kullanın.

Daha da önemlisi, yapılandırma dosyalarında tüm yollar sağlanmalıdır.

Günlüğe kaydetme için fileConfig işlevini kullanın.

Diğer her şey için, bir yapılandırma dosyası veya komut satırı parametresi veya ortam değişkenine sahip olduğunuzdan emin olun.

İlgili konular