【发布时间】:2021-05-23 18:07:13
【问题描述】:
我正在努力实现以下目标:
让 python 脚本启动一个 shell。用户将该外壳用于他需要的任何目的。关闭 shell 后,python 脚本可以使用仅输入命令的日志进行解析。
我得到的只是通过 popen 和类似方法调用 shell 的方法,但这并不是我所需要的。
【问题讨论】:
-
你需要那个外壳有多现实?如果它不需要标准输入成为真正的 TTY,这完全是微不足道的(
stdin=PIPE,让您的 Python 代码读取标准输入,记录它,然后将其发送到管道,就可以了)。如果您 确实 需要 stdin 成为真正的 TTY,我可能会使用 pexpect 来完成繁重的工作(并鼓励您在真正尝试使用 said 后回来问一个更具体的问题工具)。 -
“为什么不直接使用管道?”顺便说一句,pexpect FAQ @pexpect.readthedocs.io/en/stable/FAQ.html 的部分详细介绍了“不需要标准输入成为真正的 TTY”案例的限制。
-
@CharlesDuffy 它需要是一个实际的外壳。我正在尝试制作一个 python 脚本来记录输入命令并使用它们来创建各种脚本库。
-
...我的意思是,
bash的副本是一个“真正的 shell”,即使它的标准输入不是 TTY;有些行为有点不对劲。无论如何,如果你使用我的答案,你的子进程认为它有一个 TTY,所以它完全正常工作。 -
(也就是说,我不确定您正在做的事情是否一定会按照您的意愿工作——当标准输入在程序之间切换时,时间会产生影响:重播太快,并且错误的程序可能会消耗内容)。