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