【发布时间】:2018-01-15 03:15:50
【问题描述】:
我正在用 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 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
-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 变量,但我认为这不是这里的问题。如果没有命令提示符,我的终端将很难使用。任何帮助将不胜感激。
【问题讨论】:
-
不!不要为此碰
$PS1! :-D 您必须了解subprocess会生成一个运行某些命令的进程,但它不会像您在登录计算机时看到的那样为您提供常规终端。不像您的常规终端那样真正“等待”输入用户输入(stdin也不是真的那样工作)