ipython:我可以为 shell 命令提供输入吗

dre*_*cko 5 shell ipython ipython-notebook

我可以执行需要在 ipython 和/或 ipython notebook 中输入的 shell 命令吗?

当我执行这样的命令时,我看到它是提示符,但没有明显的方法可以从我的键盘输入。

一个例子可能是rsync对远程服务器的命令(因此需要密码)。毫无疑问,这里存在安全方面的危险 - 在我的情况下,这些在我运行时有所减少localhost

Tho*_*s K 3

重新发布作为答案,并提供更多细节:

不,这是一个长期存在的问题,确实很难解决:github.com/ipython/ipython/issues/514

问题大致在于我们的架构无法判断进程何时正在等待输入,因此它不知道提示用户输入。

您可以使用 pexpect 和 raw_input 来模拟特定程序的情况。即,如果您说出提示的样子,它会在输出中发现该提示,并要求用户输入以发送回流程。例如对于Python:

import pexpect
p = pexpect.spawn('python')
while True:
    try:
        p.expect('\n>>> ')
        print(p.before)
        p.sendline(raw_input('>>> '))
    except pexpect.EOF:
        break
Run Code Online (Sandbox Code Playgroud)

我刚刚对此进行了简短的测试 - 它有效,但相当粗糙。这个概念还可以改进。