checking 'type' programmatically
Disclaimer: this is for exploring and debugging only. Really. I can check type or __class__ in the interactive interpreter: Python 2.6.2 (r262:71600, Jun 16 2009, 16:49:04) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2 Type help, copyright, credits or license for more information. import subprocess p=subprocess.Popen(['/bin/ls'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) p subprocess.Popen object at 0xb7f2010c (so, se) = p.communicate() so 'abc.txt\nbak\nbox\nbuild\ndead.letter\nDesktop\nhrs\nmbox\nmmultbench\nmmultbench.c\npyinstaller\nscreenlog.0\nshutdown\ntaddm_import.log\nv2\nvm\nworkspace\n' se '' so.__class__ type 'str' type(so) type 'str' type(se) type 'str' But when I do smth like this in code that is ran non-interactively (as normal program): req.write('stderr type %sbr' % type(se)) req.write('stderr class %sbr' % str(se.__class__)) then I get empty output. WTF? How do I get the type or __class__ into some object that I can display? Why do that: e.g. if documentation is incomplete, e.g. documentation on Popen.communicate() says communicate() returns a tuple (stdoutdata, stderrdata) but doesn't say what is the class of stdoutdata and stderrdata (a file object to read? a string?). Regards, mk -- http://mail.python.org/mailman/listinfo/python-list
Re: checking 'type' programmatically
On 10:10 am, mrk...@gmail.com wrote: Disclaimer: this is for exploring and debugging only. Really. I can check type or __class__ in the interactive interpreter: Python 2.6.2 (r262:71600, Jun 16 2009, 16:49:04) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2 Type help, copyright, credits or license for more information. import subprocess p=subprocess.Popen(['/bin/ls'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) p subprocess.Popen object at 0xb7f2010c (so, se) = p.communicate() so 'abc.txt\nbak\nbox\nbuild\ndead.letter\nDesktop\nhrs\nmbox\nmmultbench\nmmultbench.c\npyinstaller\nscreenlog.0\nshutdown\ntaddm_import.log\nv2\nvm\nworkspace\n' se '' so.__class__ type 'str' type(so) type 'str' type(se) type 'str' But when I do smth like this in code that is ran non-interactively (as normal program): req.write('stderr type %sbr' % type(se)) req.write('stderr class %sbr' % str(se.__class__)) then I get empty output. WTF? How do I get the type or __class__ into some object that I can display? Hooray for HTML. You asked a browser to render stderr type type 'str'br. This isn't valid HTML, so pretty much any behavior goes. In this case, the browser seems to be discarding the entire type 'str' - not too suprising, as it has some features in common with an html tag. Try properly quoting your output (perhaps by generating your html with a real html generation library). Jean-Paul -- http://mail.python.org/mailman/listinfo/python-list
RE: checking 'type' programmatically
Try looking at the function 'isinstance', so for example if isinstance(obj, str): print object is a string.. elif isinstance(obj, int): print object is an integer.. -Original Message- From: python-list-bounces+billy.earney=gmail@python.org [mailto:python-list-bounces+billy.earney=gmail@python.org] On Behalf Of mk Sent: Friday, November 20, 2009 4:10 AM To: python-list@python.org Subject: checking 'type' programmatically Disclaimer: this is for exploring and debugging only. Really. I can check type or __class__ in the interactive interpreter: Python 2.6.2 (r262:71600, Jun 16 2009, 16:49:04) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2 Type help, copyright, credits or license for more information. import subprocess p=subprocess.Popen(['/bin/ls'],stdout=subprocess.PIPE,stderr=subprocess.PIPE ) p subprocess.Popen object at 0xb7f2010c (so, se) = p.communicate() so 'abc.txt\nbak\nbox\nbuild\ndead.letter\nDesktop\nhrs\nmbox\nmmultbench\nmmul tbench.c\npyinstaller\nscreenlog.0\nshutdown\ntaddm_import.log\nv2\nvm\nwork space\n' se '' so.__class__ type 'str' type(so) type 'str' type(se) type 'str' But when I do smth like this in code that is ran non-interactively (as normal program): req.write('stderr type %sbr' % type(se)) req.write('stderr class %sbr' % str(se.__class__)) then I get empty output. WTF? How do I get the type or __class__ into some object that I can display? Why do that: e.g. if documentation is incomplete, e.g. documentation on Popen.communicate() says communicate() returns a tuple (stdoutdata, stderrdata) but doesn't say what is the class of stdoutdata and stderrdata (a file object to read? a string?). Regards, mk -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list