[Tutor] cgi with system calls

Nik mymailinglists at neuf.fr
Tue Dec 14 15:09:26 CET 2004


ok, problem solved (well, partly - at least as much as I need it to be).

status = os.system('ps') doesn't set status equal to the output text, it 
sets it to the return of the call (in this case '0'). What I really want 
to do is

status = os.popen('ps').read()
print status

which works fine. However, why the first version confused the web server 
I don't know, I guess the output from ps went somewhere it wasn't 
supposed to.

nik

Nik wrote:
> no luck I'm afraid.
> 
> Also, to make it even more annoying, omitting the os call and going for
> 
> #!/usr/bin/python
> 
> import cgitb; cgitb.enable()
> 
> print "Content-type: text/plain\n\n"
> import os
> 
> status =   """PID TTY          TIME CMD
> 3649 pts0     00:00:00 su
> 3652 pts0     00:00:00 bash
> 5197 pts0     00:00:00 ps
> """
> print status
> 
> 
> works fine.
> 
> I've already half a dozen other scripts happily querying a database but 
> this is the first one to have an error outside the usual brain fart stuff.
> 
> nik
> 
> Kent Johnson wrote:
> 
>> Nik wrote:
>>
>>> hi,
>>>
>>> I'm trying to write a python cgi script that can control certain 
>>> processes on my server, but I'm having some trouble.
>>> The script is;
>>>
>>> #!/usr/bin/python
>>>
>>> import cgitb; cgitb.enable()
>>>
>>> print "Content-type: text/plain\n\n"
>>
>>
>>
>> You may need explicit \r\n here, I'm not sure:
>>
>> print "Content-type: text/plain\r\n\r\n"
>>
>> Kent
>>
>>> import os
>>> cmd = "/bin/ps"
>>> status = os.system(cmd)
>>> print status
>>>
>>> which seems straight forward, but I get a server error, and
>>> malformed header from script. Bad header=  PID TTY          TIME CMD:
>>> appears in the apache logs. The PID TTY etc indicates it's getting 
>>> the ps response, but why won't it display (even with text/plain)?
>>>
>>> Ultimately I'll have the content type as html, and I'm going to 
>>> preprocess the output of ps so it probably won't cause any problems, 
>>> but I just don't understand why this isn't working in its simple form?
>>>
>>> btw, the final idea is to list the processes corresponding to a 
>>> certain name, and allow users to stop them or create new ones. I'm 
>>> assuming this should be do-able?
>>>
>>> nik
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> http://mail.python.org/mailman/listinfo/tutor
>>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


More information about the Tutor mailing list