Welcome, guest | Sign In | My Account | Store | Cart

This recipe discribes how to change the implementation of the _run_child method in Popen3 at runtime.

Python, 23 lines
 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 :-)
Created by Brian Quinlan on Fri, 30 Nov 2001 (PSF)
Python recipes (4591)
Brian Quinlan's recipes (1)

Required Modules

Other Information and Tasks