而不是

而不是

根据这个问题的公认答案:,Python 可以很好地替代 bash

那么我的问题是:我如何进行无缝切换?我认为要进行这样的切换,主要要做的事情是:在启动虚拟终端时,调用一些 Python shell(但是怎么样?),而不是像 Bourne shell 这样的东西。

那有意义吗?如果是的话,我该怎么做呢?维基百科对常见 shell 的比较没有列出单个 Python shell:命令 shell 的比较

答案1

我知道这个问题现在已经很老了,但是有一个基于 Python 3 超集的新 shell,称为 xonsh,这可能就是您正在寻找的。

来自网站:

Xonsh 是一种类似 Python、BASHwards 的 shell 语言和命令提示符。该语言是 Python 3.4+ 的超集,带有您在 Bash 和 IPython 中习惯使用的附加 shell 原语。它适用于所有主要系统,包括 Linux、Mac OSX 和 Windows。 Xonsh 适合专家和新手的日常使用。

在 xon.sh 上查看

答案2

该线程及其接受的答案特别是关于使用 Python 作为 shell脚本编写,不作为交互的壳。

要使用不同的语言编写脚本,请将eg 放在脚本的顶部#!/usr/bin/env python而不是。#!/bin/bash

如果您想尝试不同的交互式 shell,只需运行它,例如ipython在现有的 shell 提示符处键入。如果您决定采用该 shell,请SHELL在会话开始时设置环境变量(在~/.profile大多数环境中或在~/.pam_environment),例如export SHELL=/usr/bin/ipython( .profilesyntax) 或SHELL="/usr/bin/ipython"( .pam_environmentsyntax)。

在我看来,我见过的基于 Perl 或 Python 等高级语言的 shell 都不足以用于交互式使用。对于常见任务来说,它们太冗长了,尤其是启动应用程序的 shell 的常见工作。我4年前写过类似的话题;我认为自那时以来,情况并没有得到根本改善。

答案3

而不是

原因是Python不支持处理提升的权限。最坏的情况是编辑系统文件。

比较

sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net

和:

out = subprocess.run('''sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net''', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env={"PATH": "/usr/bin"})

您不能对系统文件使用 Python 的本机文件处理,因为 Python 本质上无法以提升的权限执行子命令。

答案4

伊蟒蛇没问题。另外,看看“os”库。

相关内容