从python生成bash并打印消息

从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 = ["

我想知道是否有办法生成一个登录shell并向用户显示一条消息。规则:

  • 用户有自己的~/.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!!为什么我没有想到这一点,没必要附和!!让我试一试(有时可能过度工程化…)现在似乎是一个愚蠢的问题,但我把它留给别人,以记住在我喝第二杯咖啡之前不要发帖:)