Index: Lib/subprocess.py =================================================================== --- Lib/subprocess.py (revision 73407) +++ Lib/subprocess.py (working copy) @@ -578,10 +578,14 @@ stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): + startupinfo=None, creationflags=0, encoding=None, + error='strict'): """Create new Popen instance.""" _cleanup() + if encoding is None: + error = None + self._child_created = False if bufsize is None: bufsize = 0 # Restore default @@ -651,15 +655,24 @@ if p2cwrite is not None: self.stdin = io.open(p2cwrite, 'wb', bufsize) if self.universal_newlines: - self.stdin = io.TextIOWrapper(self.stdin) + self.stdin = io.TextIOWrapper(self.stdin, encoding, error) + elif encoding is not None: + self.stdin = io.TextIOWrapper(self.stdin, encoding, error, + os.linesep) if c2pread is not None: self.stdout = io.open(c2pread, 'rb', bufsize) if universal_newlines: - self.stdout = io.TextIOWrapper(self.stdout) + self.stdout = io.TextIOWrapper(self.stdout, encoding, error) + elif encoding is not None: + self.stdout = io.TextIOWrapper(self.stdout, encoding, error, + os.linesep) if errread is not None: self.stderr = io.open(errread, 'rb', bufsize) if universal_newlines: - self.stderr = io.TextIOWrapper(self.stderr) + self.stderr = io.TextIOWrapper(self.stderr, encoding, error) + elif encoding is not None: + self.stderr = io.TextIOWrapper(self.stderr, encoding, error, + os.linesep) def _translate_newlines(self, data, encoding):