[libvirt] About libvirt.py stdout redirection

Dear developers, As we know libvirt.py using libvirtmod.so, eg: def defineXML(self, xml): """Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine(). A previous definition for this domain would be overriden if it already exists. """ ret = libvirtmod.virDomainDefineXML(self._o, xml) if ret is None:raise libvirtError('virDomainDefineXML() failed', conn=self) __tmp = virDomain(self,_obj=ret) return __tmp In my python program #test.py import libvirt conn=libvirt.open("qemu:///system") xml=... conn.defineXML(xml) # Because i need this xml to be wrong for feature testing here # Error will happen here, and error message is printed to stderr. The error message is annoying. I need to know how to hide the error message printing to stderr by libvirtmod. After i add sys.stderr = open('xxx', 'w') before invoking conn.defineXML(xml), the error message is still printed to the terminal. Which means, i can redirect stderr to anywhere else in my python program, but it changes back to terminal when control flow go to libvirtmod. Any ideas? -- Regards, apporc

On Thu, Jan 16, 2014 at 06:31:02PM +0800, me,apporc wrote:
Dear developers, As we know libvirt.py using libvirtmod.so, eg:
def defineXML(self, xml): """Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine(). A previous definition for this domain would be overriden if it already exists. """ ret = libvirtmod.virDomainDefineXML(self._o, xml) if ret is None:raise libvirtError('virDomainDefineXML() failed', conn=self) __tmp = virDomain(self,_obj=ret) return __tmp
In my python program
#test.py import libvirt conn=libvirt.open("qemu:///system") xml=... conn.defineXML(xml) # Because i need this xml to be wrong for feature testing here # Error will happen here, and error message is printed to stderr.
The error message is annoying. I need to know how to hide the error message printing to stderr by libvirtmod.
After i add sys.stderr = open('xxx', 'w') before invoking conn.defineXML(xml), the error message is still printed to the terminal. Which means, i can redirect stderr to anywhere else in my python program, but it changes back to terminal when control flow go to libvirtmod.
Do this: def libvirt_ignore(ignore, err): pass libvirt.registerErrorHandler(f=libvirt_ignore, ctx=None) Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (2)
-
Daniel P. Berrange
-
me,apporc