On 9 January 2018 at 20:01, Antoine Pitrou <solip...@pitrou.net> wrote:
> On Mon, 08 Jan 2018 09:11:38 +0000
> Pablo Galindo Salgado <pablog...@gmail.com> wrote:
>> Hi,
>>
>> I'm currently working on exposing posix_spawn in the posix module (and by
>> extension in the os module). You can find the initial implementation in
>> this PR:
>>
>> https://github.com/python/cpython/pull/5109
>>
>> As pointed out by Gregory P. Smith, some changes are needed in the way the
>> file_actions arguments is passed from Python. For context, posix_spawn has
>> the following declaration:
>>
>> int posix_spawn(pid_t *pid, const char *path,
>> const posix_spawn_file_actions_t *file_actions,
>> const posix_spawnattr_t *attrp,
>> char *const argv[], char *const envp[]);
>>
>> Here, file_actions is an object that represents a list of file actions
>> (open, close or dup2) that is populated using helper functions on the C API.
>>
>> The question is: what is the best way to deal with this argument?
>
> How about a list of tuples like:
> [(os.SPAWN_OPEN, 4, 'README.txt', os.O_RDONLY, 0),
>  (os.SPAWN_CLOSE, 5),
>  (os.SPAWN_DUP2, 3, 6),
>  ]
>
> I don't expect this API to be invoked directly by user code so it
> doesn't have to be extremely pretty.

I'll note that one advantage of this approach is that it ties in well
with how the C API is going to have to deal with it anyway: a switch
statement dispatching on the first value, and then passing the
remaining arguments to the corresponding posix_file_actions API.

Wrapping it all up in a more Pythonic self-validating API would then
be the responsibility of the subprocess module (in the standard
library), or third party modules.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to