Pharo CLI开发:如何通过命令行向镜像内对象传递参数
命令行向Pharo镜像传递参数的处理方案
1. 直接读取启动参数
Pharo会自动收集镜像文件名后的所有命令行参数,你可以通过Smalltalk image arguments直接获取,这个方法返回一个字符串数组。比如执行pharovm image.image do something,代码里可以这么用:
| args | args := Smalltalk image arguments. "此时args的值为#('do' 'something')"
你可以在镜像的启动脚本、自定义入口逻辑里直接处理这个数组。
2. 注册启动钩子自动处理参数
如果需要镜像每次启动时自动执行参数逻辑,可以注册一个启动钩子,让Pharo在启动完成后触发处理:
StartupNotification addStartupHook: [ | args | args := Smalltalk image arguments. args ifNotEmpty: [ "根据参数首项判断执行逻辑,比如匹配'do'命令" args first = 'do' ifTrue: [ self handleDoAction: args allButFirst ] ] ].
把这段代码在Workspace执行后保存镜像,下次启动时就会自动解析并处理传入的参数。
3. 用Clap库处理复杂命令结构
如果需要支持更复杂的命令行语法(子命令、选项参数等),可以使用Pharo的Clap框架:
"先加载Clap库" Metacello new baseline: 'Clap'; repository: 'github://clap-framework/clap-st:main'; load. "自定义命令定义" MyDoCommand := ClapCommand new name: 'do'; add: (ClapPositional new name: 'action'); meaning: [ :args | | targetAction | targetAction := args at: #action. Transcript show: '执行指定动作: ', targetAction value; cr. ]. "解析并执行参数" MyDoCommand run: Smalltalk image arguments.
注意事项
如果你的镜像默认启动UI界面,建议添加--headless参数以无界面模式运行,避免UI干扰命令执行,比如:
pharovm --headless image.image do something
内容的提问来源于stack exchange,提问作者Nicholas Greensmith
相关产品推荐
相关产品推荐

