我正在编写一个 python 脚本,它的行为应该像一个典型的 shell 并提供一些自写函数。它已经工作得很好,但它总是在成功执行命令后退出,因此必须再次启动它才能执行第二个任务。我怎样才能做到,所以它不会以退出代码 0 结束,而是返回到 shell 等待新输入?那么我将如何实现退出方法?以下示例总是在输入 print-a 或 print-b 后退出:
import click
import click_repl
from prompt_toolkit.history import FileHistory
import os
@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
if ctx.invoked_subcommand is None:
ctx.invoke(repl)
@cli.command()
def print_a():
print("a")
@cli.command()
def print_b():
print("b")
@cli.command()
def repl():
prompt_kwargs = {
'history': FileHistory(os.path.expanduser('~/.repl_history'))
}
click_repl.repl(click.get_current_context(), prompt_kwargs)
def main():
while True:
cli(obj={})
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
(还有一个额外的问题:在 cmd 包中可以自定义>提示标签,这可以通过单击来实现吗?所以它是类似的东西App>?)
我有一个元素列表,我想构建一个地图,该列表中的每个元素都有一个方法调用。例如:
list = ['a', 'b', 'c']
map = list.collectEntries{[it: println(it)]}
map[b]
>>b
Run Code Online (Sandbox Code Playgroud)
由于两个问题,这不起作用:
println 分配给映射中的键时立即执行map[b] 遇到错误: groovy.lang.MissingPropertyException:
No such property: b for class: test是否可以设置这样的地图,而无需立即执行命令?怎么做到呢?
注意:我知道,我想要实现的目标听起来有点奇怪,但是我得到了一种方法,该方法将这样的映射作为参数然后运行命令,因此我没有其他选项,例如 for 循环之类的东西