This recipe discribes how to change the implementation of the _run_child method in Popen3 at runtime.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # The purpose of this code is to replace the implementation of popen2.popen* such
# that you can pass Unicode strings to those functions. The Unicode string will
# be converted to a plain string using the UTF-8 encoding.
# The more interesting point made here is that it is possible, and reasonably easy,
# to change the implementation of a method at runtime
import popen2
# This is the replacement routine. All it does in convert the cmd to UTF-8 and pass it
# to the original method. The original method is saved as a default argument (this
# takes advantage of the fact that default arguments are only evaluated once in
# Python).
def _run_child_withencoding(self, cmd, old_run_child = popen2.Popen3._run_child):
return old_run_child(self, cmd.encode('utf-8'))
# Replace the _run_child method in the Popen3 class with out new implementation
popen2.Popen3._run_child = _run_child_withencoding
# Note that the technique for changing a an method on an instance, instead of a
# class, is somewhat different because Python differentiates between bound and
# unbound instances. But that's for a different recipe :-)
|
Tags: shortcuts