detect suprocess interaction
Robin Becker
robin at NOSPAMreportlab.com
Mon Mar 26 18:31:03 EDT 2007
Nick Craig-Wood wrote:
> Robin Becker <robin at reportlab.com> wrote:
>> I'm using subprocess to carry out svn commands (probably should use the svn api
.............
>>
>> Clearly I need to supply some kind of input filelike object, but is this sort of
>> thing possible.
>
> Yes it is possible, but if you try it you'll find you'll need to
> implement the fileno() method of file objects which is asked to return
> an OS file handle. This is obviously a problem!
>
yes I figured I might have to do something low level, but it's not
terribly obvious that I can detect the read at the other end ie normally
we seem to detect when output is available, not when a write is required
ie I might be able to write to the input of my command even if the
command won't read.
> In general subprocess isn't really designed for interactive
> processes like the above. You'll find it much easier to use pexpect
> for interactive stuff.
>
> Note that svn has its own devious ways of finding a terminal to ask
> the user for the password, eg...
>
> $ svn ls svn+ssh://user@127.0.0.1/svn </dev/null >/dev/null 2>&1
> Password:
>
> I don't know exactly how it does that but I suspect it is to do with
> the controlling terminal...
>
> On my system
>
> $ setsid svn ls svn+ssh://user@127.0.0.1/svn </dev/null >/dev/null 2>&1
>
> Pops up a gui box asking for the password!
>
> You can simulate the above with
>
> Popen(..., stdin=file(os.devnull,"r"), preexec_fn=os.setsid)
.....
this just makes life more interesting :)
--
Robin Becker
More information about the Python-list
mailing list