我正在用Python(在Ubuntu中(编写一个终端程序,并且与Bash的通信运行良好。
我使用以下命令打开 Bash 的管道:
self.process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
我有单独的线程来处理标准输出和标准数据,我可以向标准输出发送命令。我唯一无法工作的是,当命令完成时,我会收到来自 Bash 的命令提示符。
例如,如果我在 Ubuntu 终端中列出目录内容,则输出为:
cyw@cyw-VirtualBox:~/testdir$ ls -l
总计 0-rw-rw-r-- 1 cyw cyw 0 12 月 1 日 15:55 file1
-rw-rw-r-- 1 cyw cyw 0 十二月 1 15:55 file2
-rw-rw-r-- 1 cyw cyw 0 十二月 1 15:55 文件3
cyw@cyw-VirtualBox:~/testdir$
我的 Python 终端中的相同输出如下所示:
ls -l
-rw-rw-r-- 1 cyw cyw 0 12 月 1 日 15:55 file1
-rw-rw-r-- 1 cyw cyw 0 十二月 1 15:55 file2
-rw-rw-r-- 1 cyw cyw 0 十二月 1 15:55 文件3
我在 Google 上的所有搜索主要建议编辑 $PS 1 变量,但我认为这不是这里的问题。如果没有命令提示符,我的终端将很难使用。任何帮助将不胜感激。
您的bash
不是交互式的。
从bash(1)
:
促使
以交互方式执行时,bash 在准备好读取命令时显示主提示符 PS1
调用
<...> 交互式 shell 是一个没有非选项参数且没有 -c 选项的 shell,其标准输入和错误都连接到终端(由 isatty(3( 确定(,或者由 -i 选项启动。
在 PS1 的交互模式下运行 bash:
p = Popen(["/bin/bash","--norc","--noprofile","-i"], shell = False,
stdin = PIPE, stdout = PIPE, stderr = STDOUT,
bufsize = 1,
env={"PS1":"\u:\h "},
preexec_fn=os.setsid)