Bash提示不显示自定义Python终端

2024-04-29 18:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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
总计0
-rw-rw-r--1周中0 12月1日15:55文件1
-rw-rw-r--1周中0 12月1日15:55文件2
-rw-rw-r--1周中0 12月1日15:55文件3
cyw@cyw VirtualBox:~/testdir
$

Python终端中的相同输出如下:
ls-l
-rw-rw-r--1周中0 12月1日15:55文件1
-rw-rw-r--1周中0 12月1日15:55文件2
-rw-rw-r--1年12月0日15:55文件3

我在Google上的搜索大多建议编辑$PS1变量,但我不认为这是问题所在。如果没有命令提示符,我的终端将很难使用。任何帮助都将不胜感激。在


Tags: 文件命令bash终端ubuntustderrstdinstdout
2条回答

在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)

您的bash不是交互式的。在

来自^{}

Prompting

When executing interactively, bash displays the primary prompt PS1 when it is ready to read a command

Invocation

<...> An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option.

相关问题 更多 >