Ian Bicking ianb at colorstudy.com
Wed Dec 12 22:22:17 CET 2007

Manlio Perillo wrote:
>> And of course it's not much code to remove them.  There's some things 
>> that technically are okay with WSGI, but in practice are bad (like 
>> leaving out QUERY_STRING, which can cause very weird bugs due to how 
>> the cgi module was written).
> QUERY_STRING can be a problem for me, since I don't add to the 
> environment dictionary empty variables, with the exception of 
> Well, not a real problem, since it easy to make sure that it is always 
> present in the WSGI environment dictionary.
> By the way: the CGI spec 
> (http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html)
> requires QUERY_STRING to be *alway* present, but the WSGI spec allows it 
> to be absent.

Yes, there's a couple keys like that, I'm afraid; SCRIPT_NAME and 
PATH_INFO too, I think.

> P.S.: I'm reading the cgi module and it only uses argv[1]:
>       if sys.argv[1:]:
>           qs = sys.argv[1]
>       I'm not sure to understand.
>       Moreover in mod_wsgi for nginx, I call PySys_SetArgv, so the WSGI
>       application sees the command line options passed to nginx.

I don't know *why* cgi does this, but as you can imagine it's weird and 
unhelpful when it does.  Having QUERY_STRING set avoids this problem. 
Most framework do (or should) make sure it's set before calling the cgi 
module, but someone who uses it directly could get a weird error as a 

I don't think there's anything wrong with exposing sys.argv; what the 
cgi module does is just weird.

Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org

More information about the Web-SIG mailing list