[IPython-User] Setting a timeout for "!" (shell) commands
Mon Jun 3 08:29:41 CDT 2013
I use IPython with Python 3 on Windows. A common mistake that I make is to
run a shell command in the notebook (or GUI) which is interactive. It's one
of those "accidental muscle memory" habits I can't break :-( As the command
is run in a hidden window, the interactive prompt is unavailable and the
IPython kernel freezes.
While this is obviously a (particularly dumb :-)) user error, it's very
hard to recover from. I have to run Process Explorer, hunt for the
appropriate shell subprocess, and kill it. That's not always easy, and
never convenient. I have tried the "Kernel/Interrupt Kernel" menu item, and
it does not kill the subprocess (I don't know if that's by design or a bug).
Would it be possible (or is there already a way) to kill such rogue
subprocesses? The obvious approach would be an extra menu item like
"Kernel/Interrupt" (or even fix that to kill subprocesses if the current
behaviour is deemed a bug).
Other options that I thought of while looking into this, that might help:
1. A list of shell commands to "blacklist", because they are known to be
interactive (less, vim, for example). There would be grey areas, though
(python is interactive unless a script name is given) that might make this
less useful in practice.
2. A user-configurable timeout for shell commands. Obviously this would
have to be off by default as it would break big data-processing commands
badly, but it could be settable interactively.
More generally, is the "run a shell command" behaviour of ipython
accessible to user code? If it were, then I could maybe experiment with
adding my own hooks to try out some of these ideas. (Actually, making the
shell command running code subclassable or otherwise configurable might be
interesting as a general enhancement - just a thought...)
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the IPython-User