Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中隐藏命令';s cmd模块_Python_Cmd - Fatal编程技术网

在Python中隐藏命令';s cmd模块

在Python中隐藏命令';s cmd模块,python,cmd,Python,Cmd,我正在基于Python的cmd模块编写一个命令行工具(实际上,cmd2,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户) 在我的Python代码中,我创建了一个与API的每个方法相对应的do_*方法。这意味着我最终会得到像do_an_admin_command和do_regular_user_command这样的东西,运行该工具的任何人都可以调用这些命令,无论其用户的权限级别如何 如果用户没有特权,我需要一种隐藏Python工具中可

我正在基于Python的
cmd
模块编写一个命令行工具(实际上,
cmd2
,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户)

在我的Python代码中,我创建了一个与API的每个方法相对应的do_*方法。这意味着我最终会得到像
do_an_admin_command
do_regular_user_command
这样的东西,运行该工具的任何人都可以调用这些命令,无论其用户的权限级别如何

如果用户没有特权,我需要一种隐藏Python工具中可用的所有管理命令的方法。您可以假设该工具在启动时知道使用什么凭据对API进行身份验证,以及用户是否具有特权;此外,管理命令是常规命令的超集


有什么想法吗?

利用子类化为您带来好处:

class RegularShell(cmd.Cmd):
    do_search(self, arg):
        ...
    do_retrieve(self, arg):
        ...

class AdminShell(RegularShell):
    do_update(self, arg):
        ...
使用RESTAPI,将特权用户连接到AdminShell,将其他用户连接到RegularShell


另一个可供选择的方案是使用PRIMD钩子来查看权限。

使用子类为您的优势:

class RegularShell(cmd.Cmd):
    do_search(self, arg):
        ...
    do_retrieve(self, arg):
        ...

class AdminShell(RegularShell):
    do_update(self, arg):
        ...
使用RESTAPI,将特权用户连接到AdminShell,将其他用户连接到RegularShell


另一个可供选择的方案是使用PRIMD钩子来查看权限。< /P>管理员命令什么?RESTAPI?你的工具?解释了问题好一点管理员的命令是什么?RESTAPI?你的工具?更好地解释了问题+1。还可以将

AdminShell
作为
RegularShell
的子类,以获得后者在前者中的所有功能。如果我执行类似于class
AdminShell(RegularShell)
(因为admin cmd是常规cmd的超集)的操作,子类化将对我有效,但考虑到我当前代码的布局,这不是很方便。使用
precmd
是否允许我阻止管理员命令也显示在帮助中?因为我也希望如此。使用precmd方法,您也应该重写help方法来做您想做的事情。好吧,它似乎可以工作,但它也需要重写do_help之类的东西。太糟糕了,像这样的功能不是现成的。还可以将
AdminShell
作为
RegularShell
的子类,以获得后者在前者中的所有功能。如果我执行类似于class
AdminShell(RegularShell)
(因为admin cmd是常规cmd的超集)的操作,子类化将对我有效,但考虑到我当前代码的布局,这不是很方便。使用
precmd
是否允许我阻止管理员命令也显示在帮助中?因为我也希望如此。使用precmd方法,您也应该重写help方法来做您想做的事情。好吧,它似乎可以工作,但它也需要重写do_help之类的东西。太糟糕了,像这样的功能没有现成的。