2013-07-23 37 views
7

考慮這個示例python代碼。它從stdin讀取並寫入文件。是否有可能在python中有sys.stdout的別名?

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() 

假設我想修改這個相同的程序來寫入標準輸出。然後,我將不得不用sys.stdout.write()替換f.write()的每個實例。但那太乏味了。我想知道是否有辦法指定f作爲sys.stdout的別名,以便f.write()被視爲sys.stdout.write()

+4

'f = sys.stdout'如何? –

+1

@AdamRosenfield,如果有效,那麼請讓它成爲答案!我是一個Python新手。 – CodeBlue

+0

@CodeBlue你告訴我們 – Stephan

回答

11

只是做

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

現在你只需要做f = sys.stdout,而不是f = open(fileName)。 (並刪除f.close()

,請考慮使用以下語法的文件。

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

這個文件會自動爲你關閉。

3

是,在Python中,你可以別名每一個類/功能/法等,只要指定要使用另一個變量的值:

import sys 
f = sys.stdout 

現在,每當你f調用方法會呼籲sys.stdout。你可以用任何你喜歡的方式來做到這一點,例如i = sys.stdin等。

+0

除了'in = sys.stdin'外,因爲'SyntaxError:invalid syntax' – Eric

+0

@Eric:對不起,忘記'in'是關鍵字 – pascalhein

14

Python中的名稱只是綁定。因此:

f = sys.stdout 

只需綁定名稱f多數民衆贊成也勢必sys.stdout對象 ...

注意,因爲他們都是同一個對象,您對f任何改變或sys.stdout在這一點上會影響 ......所以千萬不要f.close()因爲你通常不會想要做sys.stdout.close() ...

+1

你也可以做很多粗略的'sys.stdout = open('some_file.txt','w');' –

0

無論如何,這完全是一個shell的工作;只需將它發送到標準輸出並在調用腳本時使用>filename將其重定向到文件。

相關問題