从python生成bash并打印消息
我想知道是否有办法生成一个登录shell并向用户显示一条消息。规则:从python生成bash并打印消息,python,bash,Python,Bash,我想知道是否有办法生成一个登录shell并向用户显示一条消息。规则: 用户有自己的~/.bashrc,我们不想覆盖它 避免使用到子流程的管道 我正在做的是: def do_bash(tokens, state): """ Drop into system shell or execute shell commands. Examples: - bash - bash -c "ls ~/.* | grep shell" """ cmd = ["
- 用户有自己的~/.bashrc,我们不想覆盖它
- 避免使用到子流程的管道
def do_bash(tokens, state):
"""
Drop into system shell or execute shell commands. Examples:
- bash
- bash -c "ls ~/.* | grep shell"
"""
cmd = ["bash", "-l"]
if len(tokens):
cmd.extend(tokens)
subprocess.call(cmd)
我尝试将-l
与-c echo”“
组合,但这只会在新的shell中显示消息,然后返回
UDPATE:为了简化这个过程,我想执行子流程调用([“bash”、“-l”、”“])
,从用户的角度来看:
$ python ./mycode.py
I0000 03:16:11 [mycode] Various logging messages until subprocess is called
You have dropped into a temporary shell but you are still
within "mycode.py" program. You can use "exit" to continue
running the script. This shell allows to you to do foo and bar.
bash$
只需
bash
就可以从/etc/bashrc
+~/.bashrc
为您提供带有加载环境的交互式shell
如果需要登录shell,bash-l
是正确的
为了显示您的借口(使用bash),您需要再次调用bash,因为它既可以运行以执行给定的命令,也可以作为交互式shell。如果您真的不需要bash解析这个借口,我建议改为使用python输出这个借口 只要
bash
就可以从/etc/bashrc
+~/.bashrc
为您提供带有加载环境的交互式shell
如果需要登录shell,bash-l
是正确的
为了显示您的借口(使用bash),您需要再次调用bash,因为它既可以运行以执行给定的命令,也可以作为交互式shell。如果您真的不需要bash解析这个借口,我建议改为使用python输出这个借口 如果使用
-l
调用bash,则不会执行~/.bashrc
。相反,因为您请求一个登录shell,所以会执行~/.bash\u profile
(如果存在)
因此,我在我的~/.bash\u档案中有以下内容:
source ~/.bashrc
您可能希望在不使用-l
的情况下调用bash,如果使用-l
调用bash,则~/.bashrc
不会执行。相反,因为您请求一个登录shell,所以会执行~/.bash\u profile
(如果存在)
因此,我在我的~/.bash\u档案中有以下内容:
source ~/.bashrc
您可能想要的是在不使用-l
的情况下调用bash。您应该更具体地说明您想要从.bashrc获得什么,以及在哪个上下文中运行它(作为不同的用户?)。我也不理解管道的含义。如果你给出一个最小的运行程序,并告诉我们你期望的输出是什么,这可能是最简单的。@JonasEberle:我给你举一个我需要的行为的例子。但是,我不想修改.bashrc
——我可以将python中的“echo”附加到该文件中,然后执行bash-l
,但我不想碰这些文件。另外,我可以执行subprocess.call/Popen(cmd,stdin=PIPE)
,然后使用通信
,但我也尝试避免这种情况。问题是,是否有一个bash标志来在登录时执行命令并在登录后保持shell打开。您应该更具体地说明您想要从.bashrc获得什么,以及在哪个上下文中运行它(作为不同的用户?)。我也不理解管道的含义。如果你给出一个最小的运行程序,并告诉我们你期望的输出是什么,这可能是最简单的。@JonasEberle:我给你举一个我需要的行为的例子。但是,我不想修改.bashrc
——我可以将python中的“echo”附加到该文件中,然后执行bash-l
,但我不想碰这些文件。另外,我可以执行subprocess.call/Popen(cmd,stdin=PIPE)
,然后使用通信
,但我也尝试避免这种情况。问题是登录时是否有bash标志来执行命令,并在登录后保持shell打开ssh1t man!!为什么我没有想到这一点,没必要附和!!让我试一试(有时可能过度工程化…)现在似乎是一个愚蠢的问题,但我留下来是为了记住在第二杯咖啡之前不要发布:)Sh1t man!!为什么我没有想到这一点,没必要附和!!让我试一试(有时可能过度工程化…)现在似乎是一个愚蠢的问题,但我把它留给别人,以记住在我喝第二杯咖啡之前不要发帖:)