Bash提示没有显示自定义Python终端

时间:2014-12-01 03:10:24

标签: python linux bash shell

我正在用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变量,但我不认为这是问题。没有命令提示我的终端将很难使用。任何帮助将不胜感激。

2 个答案:

答案 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)