python寫的CGI腳本,用print為什麼不是列印到控制台,而是發送到客戶端?
01-23
python寫的CGI腳本,用print為什麼不是列印到控制台,而是發送到客戶端?什麼原理?
如:reshtml = """&&&&&& Friends CGI Demo&
Friends list for: &xx&&
Your name is: &xx&&You have &xx& friends.&
Click &here& to edit your data again.
&&"""print reshtml #用print為什麼不是列印到控制台,而是發送到客戶端?謝謝
你寫一個hello.py:
print "Hello"
然後執行 python hello.py &> hello.txt
print輸出到文件了
print的輸出是標準輸出,可以指向任何可以輸出的流,包括http輸出
是重定向了,可以看一下CSAPP第十一章網路編程,用C寫一個web伺服器,裡面有用到dup2函數,將stdout重定向到client。
為什麼不列印到控制台?
因為對於一個WEB Server來說,他的標準輸出可以當做WEB Client了,而不再是終端。所以print不列印到終端就很正常了。
什麼原理?
就是換個輸出目標而已,可以是普通文件,也可以是網路socket
怎麼實現的?
print輸出的內容,被Web Server響應給客戶端了。
不光是Python,所有的CGI都是通過輸入輸出重定向實現的。因為CGI就是這樣的一個WEB伺服器介面。
用c的printf、c++的cout、java的system.out.print,都是一樣。
題主應該先看看CGI是咋回事,學習下CGI的基本知識。包括CGI的缺點以及變通方案。
一個CGI程序將它的動態內容發送到標準輸出。在子進程載入並運行CGI程序之前,它使用Unix dup2函數將標準輸出重定向到和客戶端相關聯的【已連接描述符】。因此,任何CGI程序寫到標準輸出的東西都會直接到達客戶端。
在哪裡設置的?
因為標準輸出的目的地被設置為webserver了
推薦閱讀:
※Python下使用matplotlib庫時,如何與LaTeX結合起來?
※用Python寫過哪些「腦洞大開」的小工具?
※在數據分析方面,比起python,excel的局限性在哪?
※django+nginx+uwsgi+git有哪些自動化部署工具?
※uWSGI 伺服器的 uwsgi 協議究竟用在何處?
TAG:Python |