msg74284 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2008-10-03 23:45 |
subprocess doesn't support bytes for the "args" argument. - On Windows, subprocess._execute_child() converts args to a string if it was a list - On UNIX, subprocess._execute_child() converts args to a list if it's a string If shell=True, _execute_child() adds a prefix to the arguments. I don't know if subprocess should accept bytes in a command line. Attached patch fixes POSIX version of subprocess to support bytes. See also related issue #4035. |
|
|
msg74305 - (view) |
Author: Martin v. Löwis (loewis) *  |
Date: 2008-10-04 08:16 |
I think this should be deferred to 3.1. I'm not sure how much consistency across platforms is desirable, however, using strings is surely the better choice on Windows. I could sympathize with providing bytes support only on POSIX, but I'm sure others will disagree. |
|
|
msg74505 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2008-10-08 00:43 |
Oops, I attached the wrong patch :-/ |
|
|
msg75366 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2008-10-30 09:52 |
@loewis: My patch only changes the behaviour of the POSIX version of subprocess, Windows version is unchanged. |
|
|
msg100357 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2010-03-03 22:37 |
os.exec*() now accept bytes thanks to the PEP 383: see issue #4035. I updated my patch: it now includes tests \o/ It works on Linux. Can someone test it on Windows and/or Mac OS X? |
|
|
msg100360 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2010-03-04 00:25 |
(oops, the issue is still open) |
|
|
msg100363 - (view) |
Author: Brian Curtin (brian.curtin) *  |
Date: 2010-03-04 00:53 |
The tests pass on OS X, but fail on Windows. I'll look into it. |
|
|
msg100365 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2010-03-04 01:12 |
Oops, I realized that the second test is just useless. The argument is str, not bytes. I wanted to test Popen(bytes, shell=True). What is the right encoding to convert a string to bytes for the file system? |
|
|
msg100366 - (view) |
Author: Brian Curtin (brian.curtin) *  |
Date: 2010-03-04 01:26 |
The list2cmdline function checks spaces, tabs, etc in line 521 of subprocess.py. In your first test case, it ends up checking if a string is contained in a bytes object, which is a TypeError for the str not supporting the buffer API. Would it be acceptable to just add "arg = str(arg)" right under the for loop? That fixes it for me, not sure of the preferred way to go about it. |
|
|
msg100367 - (view) |
Author: Brian Curtin (brian.curtin) *  |
Date: 2010-03-04 01:30 |
> What is the right encoding to convert a string to bytes > for the file system? sys.getfilesystemencoding()? |
|
|
msg100376 - (view) |
Author: Martin v. Löwis (loewis) *  |
Date: 2010-03-04 06:43 |
On Windows, command lines shouldn't need to be encoded in any encoding. Instead, the unicode string should be passed to the system call as-is. |
|
|
msg103796 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2010-04-20 23:51 |
subprocess accepts byte string in program arguments in py3k, so the issue can be closed. I opened other issues for the other arguments: - current working directory: #8393 - environment variables: #8391 - error message: #8467 |
|
|