標籤:

python寫的CGI腳本,用print為什麼不是列印到控制台,而是發送到客戶端?

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 |