【发布时间】:2019-08-30 15:22:34
【问题描述】:
我正在使用以下 python3.6 代码 (g.py) 来启动带有自定义提示的交互式 bash shell:
import subprocess
import os
envi = os.environ.copy() # env of the python process
envi["PS1"]="my-prompt"
s = subprocess.Popen(['/bin/bash', '-i'], env=envi, shell=False)
s.communicate()
当我在 debian stretch 9 上运行它时,我得到:
initial_prompt> ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
206 pts/0 00:00:00 ps
initial_prompt> python3 g.py
user123§ced47a150f0c:ß$
user123§ced47a150f0c:ß$ ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
207 pts/0 00:00:00 python3
208 pts/0 00:00:00 bash
209 pts/0 00:00:00 ps
我得到user123§ced47a150f0c:ß$ 而不是my-prompt。
- 当我将
--norc添加到/bin/bash时,它可以工作,但我需要阅读~/.bashrc。 - 在
~/.bashrc中,PS1未更改。我没有~/.bash_profile文件。 -
PROMPT_COMMAND环境变量为空。 - 在 MacOS 上,它就像一个魅力。
【问题讨论】:
-
您将可能需要使用
--noprofile和--norc以避免任何启动后配置文件覆盖您设置的环境的可能性。否则,无论这些文件决定做什么,您都将受到摆布。 -
我不知道要禁用系统级初始化文件而不禁用用户级初始化文件。
标签: python python-3.x bash shell subprocess