Sage wrapper around pexpect’s spawn
class and¶
the ptyprocess’s PtyProcess
class.
AUTHOR:
Jeroen Demeyer (2015-02-01): initial version, see trac ticket #17686.
Jeroen Demeyer (2015-12-04): add support for pexpect 4 + ptyprocess, see trac ticket #10295.
-
class
sage.interfaces.sagespawn.
SagePtyProcess
(pid, fd)¶ Bases:
ptyprocess.ptyprocess.PtyProcess
-
close
(force=None)¶ Quit the child process: send the quit string, close the pseudo-tty and kill the process.
This function returns immediately, it doesn’t wait for the child process to die.
EXAMPLES:
sage: from sage.interfaces.sagespawn import SageSpawn sage: s = SageSpawn("sleep 1000") sage: s.close() sage: while s.isalive(): # long time (5 seconds) ....: sleep(float(0.1))
-
terminate_async
(interval=5.0)¶ Terminate the child process group asynchronously.
This function returns immediately, while the child is slowly being killed in the background.
INPUT:
interval
– (default: 5) how much seconds to wait between sending two signals.
EXAMPLES:
Run an infinite loop in the shell:
sage: from sage.interfaces.sagespawn import SageSpawn sage: s = SageSpawn("sh", ["-c", "while true; do sleep 1; done"])
Check that the process eventually dies after calling
terminate_async
:sage: s.ptyproc.terminate_async(interval=float(0.2)) sage: while True: ....: try: ....: os.kill(s.pid, 0) ....: except OSError: ....: sleep(float(0.1)) ....: else: ....: break # process got killed
-
-
class
sage.interfaces.sagespawn.
SageSpawn
(*args, **kwds)¶ Bases:
pexpect.pty_spawn.spawn
Spawn a subprocess in a pseudo-tty.
*args
,**kwds
: seepexpect.spawn
.name
– human-readable name for this process, used for display purposes only.quit_string
– (default:None
) if notNone
, send this string to the child process before killing it.
EXAMPLES:
sage: from sage.interfaces.sagespawn import SageSpawn sage: SageSpawn("sleep 1", name="Sleeping Beauty") Sleeping Beauty with PID ... running ...
-
expect_peek
(*args, **kwds)¶ Like
expect()
but restore the read buffer such that it looks like nothing was actually read. The next reading will continue at the current position.EXAMPLES:
sage: from sage.interfaces.sagespawn import SageSpawn sage: E = SageSpawn("sh", ["-c", "echo hello world"]) sage: _ = E.expect_peek("w") sage: E.read().decode('ascii') u'hello world\r\n'
-
expect_upto
(*args, **kwds)¶ Like
expect()
but restore the read buffer starting from the matched string. The next reading will continue starting with the matched string.EXAMPLES:
sage: from sage.interfaces.sagespawn import SageSpawn sage: E = SageSpawn("sh", ["-c", "echo hello world"]) sage: _ = E.expect_upto("w") sage: E.read().decode('ascii') u'world\r\n'