Dav*_* V. 2 haskell command-line-arguments applicative optparse-applicative
我正在使用 stackage lts 5.1 附带的 optparse-applicative 我有一个带有子命令的解析器,并且我已经描述了它们的选项的帮助文本,但它们没有显示。
这是我运行可执行文件时的输出--help
:
[david@devcentos65 manipro]$ /home/david/.local/bin/manipro --help
manipro - text1
Usage: manipro COMMAND [-v|--verbose] text2
Available options:
-h,--help Show this help text
-v,--verbose text3
Available commands:
export text4
dico text9
Run Code Online (Sandbox Code Playgroud)
代码 :
parserArgs :: ParserInfo ArgApp
parserArgs = info (helper <*> args) desc
where
desc =
fullDesc <>
progDesc "text1" <>
header "text2"
args = ArgApp <$> argCmd <*> optverbose
where
optverbose = switch (
short 'v' <> long "verbose" <>
help "text3" )
argCmd = subparser (argCmdExport <> argCmdDico)
argCmdExport = command "export" infos
where
infos = info options desc
desc = progDesc "text4"
options = ArgCmdExport <$>
argModeExport <*>
argTableExport <*>
argOptExport
argModeExport = argument auto (metavar "FORMAT")
argTableExport = argument text (metavar "TABLE")
argOptExport = ArgOptExport <$> optional noesc <*> optional cols <*>
ens <*> tst
where
noesc = option textList (long "noesc" <> metavar "CHAMPS" <> help "text5" )
cols = option textList (long "cols" <> metavar "CHAMPS" <> help "text6" )
ens = flag EnsEtoile EnsDollar (short 'd' <> long "dollar" <>
help "text7")
tst = flag False True (short 't' <> long "test" <>
help "text8")
argCmdDico = command "dico" infos
where
infos = info options desc
desc = progDesc "text9"
options = ArgCmdDico <$>
argOptDico
argOptDico = ArgOptDico <$> optional tables
where
tables = option textList (long "tables" <> metavar "TABLES" <>
help "text10" )
text = str >>= return . pack
textList = str >>= return . splitOn "," . pack
Run Code Online (Sandbox Code Playgroud)
小智 6
正如 Zeta 指出的,单个命令的描述显示在 上<executable> <command> --help
。但要使其工作,在optparse-applicative
解析器中--help
每个命令的子解析器都需要该选项。您只定义了一个<executable> --help
(请参阅 haskell 代码块的第二行)。如果没有特定命令的帮助解析器,则输出<executable> <command> --help
将不是帮助消息,而是有关invalid option --help
和使用说明的通知。
一般模式是按顺序应用选项的解析器--help
,即helper
,应用到命令参数的解析器,如下所示:command "command-name" (info (yourCommandArgParser <**> helper) (fullDesc <> progDesc "your commands description" <> ...))
。
所以对于export
命令你可以写:
argCmdExport = command "export" infos
where
infos = info (options <**> helper) desc
desc = progDesc "text4"
options = ArgCmdExport <$>
argModeExport <*>
argTableExport <*>
argOptExport
Run Code Online (Sandbox Code Playgroud)
附言。这个问题很老了,但是当我遇到同样的问题时,我偶然发现了它。网络上仍然没有任何关于它的信息。
归档时间: |
|
查看次数: |
1040 次 |
最近记录: |