深入理解dotnet/interactive中的输入提示功能
引言
在交互式编程环境中,获取用户输入是一个常见需求。dotnet/interactive项目提供了多种灵活的方式来获取用户输入,使笔记本(notebook)能够动态地接收参数,而无需硬编码在代码中。本文将全面介绍dotnet/interactive中的输入提示功能,包括魔法命令和.NET代码两种实现方式。
魔法命令中的输入提示
魔法命令是dotnet/interactive中一种特殊的指令语法,以#!
开头。在这些命令中,可以使用@input
标记来请求用户输入。
基本用法
最简单的输入提示示例:
#!set --name myVariable --value @input
执行此命令时,VS Code窗口顶部会显示一个输入提示框。
自定义提示文本
可以通过两种方式为输入提示添加自定义描述:
#!set --name myVariable --value @input:"请输入一个值"
#!set --name myVariable --value @input:{"prompt": "请输入一个值"}
第一种是第二种的简写形式,两者效果相同。
保存输入值
对于不常变化的输入值,可以将其保存以便后续重用:
#!set --name myConfigFile --value @input:{"saveAs": "widget configuration"}
首次运行时提示输入,之后会自动使用保存的值。该功能基于PowerShell的SecretManagement和SecretStore模块实现,会安全地存储值。
输入类型提示
通过指定type
属性,可以提供更适合特定输入类型的UI:
#!set --name myConfigFile --value @input:{"type": "file"}
这会显示文件选择对话框而非普通文本输入框。当前支持的类型包括text
和file
。
多输入表单
单个魔法命令中可以包含多个@input
标记,此时会显示一个包含多个字段的表单:
#!set --name @input:{"prompt": "请输入颜色名称"} --value @input:{"type": "color", "prompt": "选择颜色"}
支持所有标准HTML输入类型,如color
、date
、number
等。
使用.NET代码获取输入
除了魔法命令,还可以直接在.NET代码中请求用户输入。
单输入请求
C#示例:
using Microsoft.DotNet.Interactive;
var input = await Kernel.GetInputAsync("请输入一个数字");
带类型提示的输入
可以指定输入类型以显示更合适的UI:
var input = await Kernel.GetInputAsync(
"请选择文件",
typeHint: "file");
多输入请求
使用RequestInputsAsync
方法请求多个输入:
var inputs = await Kernel.RequestInputsAsync(
new InputRequest("name", "请输入姓名"),
new InputRequest("age", "请输入年龄", inputTypeHint: "number"));
密码输入
对于敏感信息,使用GetPasswordAsync
方法:
var password = await Kernel.GetPasswordAsync("请输入连接字符串");
这会隐藏用户输入的内容。
自动化场景中的输入处理
在自动化场景(如测试或批处理)中,可以通过命令行参数提供输入值。虽然这是实验性功能,但非常有用:
dotnet repl describe /path/to/notebook.ipynb
此命令会列出笔记本所需的参数,然后可以通过--input
选项在命令行提供值:
dotnet-repl --run notebook.ipynb --input param1="value1" --input param2="value2"
最佳实践
- 对于不常变化的配置值,使用
saveAs
选项保存 - 敏感信息始终使用
@password
或GetPasswordAsync
- 为输入提供清晰的提示文本
- 尽可能指定输入类型以获得更好的用户体验
- 在自动化场景中考虑使用命令行参数替代交互式输入
总结
dotnet/interactive提供了灵活多样的输入获取方式,从简单的魔法命令到完整的.NET API,满足了从交互式开发到自动化处理的各种场景需求。通过合理使用这些功能,可以创建更具交互性和复用性的笔记本应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考