import subprocess, sys, os for fs_encoding in ('latin-1', 'utf-8'): env = os.environ.copy() env['PYTHONFSENCODING'] = fs_encoding code = '; '.join(( 'import subprocess, sys', r"args = [sys.executable, '-c', 'import sys; print(ascii(sys.argv))', 'U+00E9 = \xe9']", 'subprocess.Popen(args).wait()')) args = [sys.executable, '-c', code] stdout, stderr = subprocess.Popen(args, stdout=subprocess.PIPE, env=env).communicate() stdout = stdout.rstrip() assert stdout == b"['-c', 'U+00E9 = \\xe9']", (stdout, fs_encoding)