perl - 如何使用 getopt 子类化 Minion 命令?
问题描述
我正在使用的Minion作业队列中的一项任务需要用户名和密码。
我在这里找到了关于如何将参数传递给 Mojo 应用程序的很好的描述,所以我这样做了:
package Minion::Command::minion::secure_worker;
use Mojo::Base 'Minion::Command::minion::worker';
use Mojo::Util 'getopt';
sub run {
my ( $self, @args ) = @_;
my $worker = $self->app->minion->worker;
my $status = $worker->status;
getopt \@args,
'U|username=s' => \my $username,
'P|password=s' => \my $password;
$self->app->credentials->{username} = $username;
$self->app->credentials->{password} = $password;
return $self->SUPER::run;
}
1
但是,当我尝试传递原始工作命令中的选项时 - 例如-j
我得到:
Unknown option: j
这是为什么?看起来子类化命令不起作用,或者 getopt slurps 一切?
解决方案
调用getopt
是不可组合的。您可以尝试处理(然后传递)您的超类也处理的所有选项,或者使用该选项自己调用Getopt::Longpass_through
。这将忽略所有未知选项:
package Minion::Command::minion::secure_worker;
use Mojo::Base 'Minion::Command::minion::worker';
use Getopt::Long 'GetOptionsFromArray';
use Getopt::Long ':config', 'pass_through';
sub run {
my ( $self, @args ) = @_;
my $worker = $self->app->minion->worker;
my $status = $worker->status;
GetOptionsFromArray \@args,
'U|username=s' => \my $username,
'P|password=s' => \my $password;
$self->app->credentials->{username} = $username;
$self->app->credentials->{password} = $password;
return $self->SUPER::run;
}
1
推荐阅读
- python - 自我对象和非自我对象之间有什么区别,特别是在 Tkinter 类中?
- docusignapi - 对现有用户的 `/users` 的 POST 请求会导致重新发送激活电子邮件
- tableau-api - 如何复制 Tableau 数据提取逻辑?
- angular - 将现有的 Ionic / Firebase 项目部署到新的 Firebase 托管项目
- c# - VS 2019 无法通过实体框架加载 MySQL 数据库
- java - 将 Spring Boot 2.2.6 迁移到 Spring Boot 2.3.0 时的问题
- elasticsearch - 布尔过滤器不只显示弹性搜索中的过滤数据
- extjs - 生产构建中缺少 ExtJS 7 Froala 编辑器样式
- vue.js - 我在 vue.js 中遇到错误-“filteredTeamsData”计算属性中的意外副作用
- python - 如何提取 datframe 列的一部分并使用该提取创建另一列