11
11
12
12
13
13
# workaround for http://bugs.python.org/issue8513
14
- SHOULD_NOT_USE_SHELL_MODE = sys .version_info [:2 ] == (3 , 2 ) and not sys . platform == 'win32'
14
+ SHOULD_NOT_USE_BYTES = sys .version_info [:2 ] == (3 , 2 )
15
15
16
16
# workaround for Windows+Python3 environment
17
17
SHOULD_NOT_ENCODE_ARGS = six .PY3 and sys .platform == 'win32'
21
21
# Process operations
22
22
#
23
23
def __convert_args (args , shell , cmd_encoding ):
24
- workaround = shell and SHOULD_NOT_USE_SHELL_MODE
25
-
26
24
if isinstance (args , six .string_types ):
27
25
# input as string
28
26
if not SHOULD_NOT_ENCODE_ARGS :
29
27
args = to_bytes (args , cmd_encoding )
30
- if workaround :
31
- return ['/bin/sh' , '-c' , args ], False
32
- else :
33
- return args , shell
34
-
35
- # input as list
36
- if shell and sys .platform != 'win32' :
37
- args = [to_bytes (subprocess .list2cmdline (args ), cmd_encoding )]
38
- if workaround :
39
- return ['/bin/sh' , '-c' ] + args , False
28
+ if SHOULD_NOT_USE_BYTES :
29
+ args = [args ]
40
30
else :
41
- if not SHOULD_NOT_ENCODE_ARGS :
42
- if six .PY2 or sys .platform != 'win32' :
31
+ # input as list
32
+ if shell and sys .platform != 'win32' :
33
+ args = [to_bytes (subprocess .list2cmdline (args ), cmd_encoding )]
34
+ else :
35
+ if not SHOULD_NOT_ENCODE_ARGS :
43
36
args = [to_bytes (a , cmd_encoding ) for a in args ]
44
-
45
- return args , shell
37
+ return args
46
38
47
39
48
40
def __convert_env (env , encoding ):
@@ -69,9 +61,9 @@ def execute_command(args, shell=False, cwd=None, env=None, stdin=None, stdout=No
69
61
:param cmd_encoding: command line encoding: string
70
62
:return: return code
71
63
"""
72
- args , shell = __convert_args ( args , shell , cmd_encoding )
73
- return subprocess . call ( args = args , shell = shell , cwd = cwd , env = __convert_env (env , cmd_encoding ),
74
- stdin = stdin , stdout = stdout , stderr = stderr )
64
+ return subprocess . call (
65
+ args = __convert_args ( args , shell , cmd_encoding ) , shell = shell , cwd = cwd , env = __convert_env (env , cmd_encoding ),
66
+ stdin = stdin , stdout = stdout , stderr = stderr )
75
67
76
68
77
69
def capture_command (args , shell = False , cwd = None , env = None , stdin = None , cmd_encoding = 'utf-8' ):
@@ -85,9 +77,8 @@ def capture_command(args, shell=False, cwd=None, env=None, stdin=None, cmd_encod
85
77
:param cmd_encoding: command line encoding: string
86
78
:return: tuple of return code, stdout data and stderr data
87
79
"""
88
- args , shell = __convert_args (args , shell , cmd_encoding )
89
80
p = subprocess .Popen (
90
- args , shell = shell , cwd = cwd , env = __convert_env (env , cmd_encoding ),
81
+ __convert_args ( args , shell , cmd_encoding ) , shell = shell , cwd = cwd , env = __convert_env (env , cmd_encoding ),
91
82
stdin = stdin , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
92
83
stdout_data , stderr_data = p .communicate ()
93
84
return p .returncode , stdout_data , stderr_data
@@ -99,7 +90,7 @@ def execute_command_with_pid(args, pid_file=None, shell=False, cwd=None, env=Non
99
90
return execute_command (args , shell , cwd , env , stdin , stdout , stderr , cmd_encoding )
100
91
else :
101
92
try :
102
- args , shell = __convert_args (args , shell , cmd_encoding )
93
+ args = __convert_args (args , shell , cmd_encoding )
103
94
p = subprocess .Popen (
104
95
args , shell = shell , cwd = cwd , env = __convert_env (env , cmd_encoding ),
105
96
stdin = stdin , stdout = stdout , stderr = stderr )
0 commit comments