我正在用Python编写一个终端程序(在Ubuntu中),我和Bash的沟通工作得很好。
我使用以下命令打开Bash管道:
self.process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
我有单独的线程来处理stdout和stderr数据,我可以向stdin发送命令。我唯一无法工作的是当命令完成时我从Bash收到命令提示符。
例如,如果我在Ubuntu终端中列出目录内容,则输出为:
cyw @ cyw-VirtualBox:〜/ testdir $ ls -l <br/>
共0
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file1
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file2
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file3
cyw @ cyw-VirtualBox:〜/ testdir $
我的Python终端中的相同输出如下:
ls -l <br/>
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file1
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file2
-rw-rw-r-- 1 cyw cyw 0 Dec 1 15:55 file3
我在Google上的搜索主要建议编辑$ PS1变量,但我不认为这是问题。没有命令提示我的终端将很难使用。任何帮助将不胜感激。
答案 0 :(得分:3)
您的bash
不是互动的。
来自bash(1)
:
提示
当以交互方式执行时,bash在准备好读取命令时显示主提示符PS1
调用
&LT; ...&GT;交互式shell是在没有非选项参数的情况下启动的,没有-c选项,其标准输入和错误都连接到终端(由isatty(3)确定),或者以-i选项开头。
答案 1 :(得分:0)
在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)