2013-07-23 24 views
7

Bu örnek python kodunu düşünün. Stdin'den okur ve bir dosyaya yazar.Python'da sys.stdout için bir takma ad var mı?

import sys 

arg1 = sys.argv[1] 

f = open(arg1,'w') 
f.write('<html><head><title></title></head><body>') 

for line in sys.stdin: 
    f.write("<p>") 
    f.write(line) 
    f.write("</p>") 

f.write("</body></html>") 
f.close() 

Bunun yerine stdout'a yazmak için aynı programı değiştirmek istediğimi varsayalım. Daha sonra, f.write()'un her bir örneğini sys.stdout.write() ile değiştirmem gerekecek. Ama bu çok sıkıcı olurdu. sys.stdout için bir diğer ad olarak f belirtmenin bir yolu olup olmadığını öğrenmek istiyorum, böylece f.write()sys.stdout.write() olarak kabul edilir.

+4

Nasıl f = sys.stdout'? –

+1

@AdamRosenfield, eğer işe yararsa, lütfen cevap verin! Ben bir Python acemiiyim. – CodeBlue

+0

Eğer 'baskı >> f unutma, Ayrıca bize – Stephan

cevap

11

Sadece

>>> import sys 
>>> f = sys.stdout 
>>> f.write('abc') 
abc 

Şimdi sadece f = sys.stdout yerine f = open(fileName) yapmama gerek var mı. (Ve kaldır f.close())

Ayrıca, Lütfen dosyalar için aşağıdaki sözdizimini kullanmayı düşünün.

with open(fileName, 'r') as f: 
    # Do Something 

Dosya bu şekilde sizin için otomatik olarak kapanır.

3

Evet, Python, sen sadece başka bir değişkene kullanmak istediğiniz değeri atamak vb her sınıf/fonksiyon/metot diğer ad olabilir: Artık f çağırıyoruz her yöntem

import sys 
f = sys.stdout 

çağrıda alacak sys.stdout. Bunu istediğiniz gibi yapabilirsiniz, örneğin i = sys.stdin vb. Ile de

+0

'= sys.stdin' içinde, SyntaxError' çünkü değil hariç: geçersiz syntax' – Eric

+0

@Eric: üzgün, 'unutmuş bir anahtar kelime – pascalhein

14

Python'daki isimler sadece bağlantılardır. Bu nedenle:

f = sys.stdout 

Sadece onlar aynı nesne hem madem tüm değişiklikler f yapmak olduğunu ... da sys.stdout için kaçınılmazdır nesne için

Not adını f bağlar ya bu noktada sys.stdout ... hem etkileyecektir ... Yani normalde sys.stdout.close() yapmak istemem olarak f.close() yapmayın

+1

olmanın Alanı'nda sen (çok) daha kabataslak' sys.stdout yapmak da yapabilirsiniz = open ('some_file.txt', 'w'); ' –

0

Bu kesinlikle bir kabuğun işidir; komut dosyasını çağırdığınızda, onu standart olarak gönderin ve >filename kullanarak bir dosyaya yönlendirin.

İlgili konular