gpt4 book ai didi

python - 如何在单独的进程中运行 shell 并获得自动完成? (Python)

转载 作者:太空狗 更新时间:2023-10-29 11:27:41 24 4
gpt4 key购买 nike

我有一个 linux 应用程序,它从某个设备获取输入流。该输入应定向到 shell 进程,以便它向用户模拟标准 shell。到目前为止,我已经通过创建一个运行“/bin/sh”的进程来完成它,并且我重定向了它的输入、输出和标准错误,如下所示:

import subprocess

p = subprocess.Popen(shell=False, args=['/bin/sh'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
_make_nonblocking(p.stdout) # sets O_NONBLOCK
_make_nonblocking(p.stderr)

当我只是一个 pass 命令时,一切正常:

p.stdin.write('pwd\n')
p.stdout.read()
'/home/dave\n'

为了自动完成,我尝试写:

p.stdin.write('ls s\t')
p.stdout.read()
IOError: [Errno 11] Resource temporarily unavailable

我希望得到一个可能完成的列表,但在我将 '\n' 放入标准输入之前什么也没有发生。 (此外,stderr 中没有任何等待)。

我查看了 telnetd 代码,看到了 pty 的使用。我尝试使用 pty.openpty() 并将 slave 设置为 stdin,但这也不起作用。应该怎么做?

更新:我按照建议使用了 -i 参数。现在我有一个问题,一旦我使用 Popen 并按 ENTER 键,python shell 就会移动到后台,如下所示:

>>> p = subprocess.Popen(shell=False, args=['/bin/sh', '-i'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> <ENTER>
[1]+ Stopped ipython
$

最佳答案

使用 bash 自动完成仅在交互模式下有效:

-i        If the -i option is present, the shell is interactive.

这将进行适当的模拟,包括显示提示和所有常见的东西。

关于python - 如何在单独的进程中运行 shell 并获得自动完成? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com