On 05:17 pm, a...@roiban.ro wrote:
On 3 September 2014 16:49, Adi Roiban <a...@roiban.ro> wrote:
Hi,

If I call spawnProcess with a bad executable, on Unix the process will
exit with exit code 1 while on Windows an OSError is raised.

I am working on a multi-OS software and to make my life easier I ended
up with this hack inspired by _BackRelay

https://gist.github.com/adiroiban/bac493f00ce5e94738ce

----

Is there something already in Twisted doing this? Am I reinventing the wheel?

If not, do you think that it would help to update _BackRelay to
support timeout and cross-os error handling?

Searching the Twisted trac I found this ticket
http://twistedmatrix.com/trac/ticket/4184

Maybe we can leave spawnProcess as the low-level API and then create
another wrapper which will handle/raise the errors in an consistent
way.

For the case where command is not found, I prefer the behaviour from
Windows where an OSError is raise, rather than
looking at errReceived and trying to guess is execvpe call failed or not.

It is more convenient, certainly. Unfortunately on POSIX the underlying API isn't synchronous - which is why the POSIX implementation doesn't deliver the exception synchronously. So to be uniform we probably need to make the Windows behavior asynchronous.

I suggest we can improve the situation by reporting the error more in an easier-to-recognize way when we report it asynchronously, though.

For example, instead of forcing the application to parse stderr we could deliver a different exception type to processEnded.

A better solution would be to make `spawnProcess` properly asynchronous - have it return a `Deferred` that fires with an `IProcessTransport` and let that `Deferred` fire with a `Failure` if there is a problem creating the new process.

But that's probably more like "introduce an API to replace `spawnProcess`" (for which I believe there is also a ticket).

Jean-Paul

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to