Command line interface 困惑于如何使用命令行表单:模块中的未绑定标识符和提取参数
我试图在Racket中制作一个基本的(但专门的)命令行文件搜索工具,供我个人使用。以下是我到目前为止的情况:Command line interface 困惑于如何使用命令行表单:模块中的未绑定标识符和提取参数,command-line-interface,racket,command-line-tool,Command Line Interface,Racket,Command Line Tool,我试图在Racket中制作一个基本的(但专门的)命令行文件搜索工具,供我个人使用。以下是我到目前为止的情况: #! /usr/bin/env racket #lang racket/base (require racket/path) (require racket/cmdline) (require racket/string) (define (basename f) (path->string (file-name-from-path f))) (define (plain
#! /usr/bin/env racket
#lang racket/base
(require racket/path)
(require racket/cmdline)
(require racket/string)
(define (basename f)
(path->string (file-name-from-path f)))
(define (plain-name? path)
(regexp-match? "^[A-Za-z]+$" (basename path)))
(define (find-csv root [name ""] [loc ""] [owner ""] [max 10000])
(define m 0)
(for ([f (in-directory root plain-name?)]
#:when (and (file-exists? f)
(filename-extension f)
(bytes=? #"csv" (filename-extension f))
(string-contains? (path->string f) loc)
(string-contains? (basename f) name))
#:break (>= m max))
(set! m (add1 m))
(displayln f)))
(define args
(command-line
#:once-each
[("-n" "--max-paths") "Maximum number of file paths to return" (max 10000)]
[("-o" "--owner") "Limit search to certain owners" (owner "")]
[("-t" "--template") "Limit search to certain templates" (template "")]
[("-l" "--location")
"Limit search to directory structure containing location"
(loc "")]
[("-p" "--root-path") "Look under the root path" (root "/home/wdkrnls")]))
我的第一个问题是,我试图通过运行它时出错
./list-files.rkt
使用命令行
似乎遵循Racket文档中的问候语示例,但Racket似乎在寻找已定义的函数,其中我只是尝试为变量指定默认值,我希望这些变量可用于我的查找csv
函数
我的第二个问题是,从文档中我不清楚如何使用这些参数从命令行调用find csv
。文档中的示例仅涉及一个参数的基本情况。我没有必需的参数,但有几个可选参数
你能给我一些建议吗?谢谢。在文档中的中,所有用于将标志设置传达给后续处理步骤(示例中未显示)的标志切换
因此,在您的特定情况下,您可以定义如下参数:
(define max (make-parameter 10000))
(define owner (make-parameter ""))
(define template (make-parameter "")
(define loc (make-parameter ""))
(define root (make-parameter "/home/wdkrnls"))
这里的参数是参数的默认值。然后,您可以使用参数值调用find csv
(通过将参数用作函数,如(max)
),也可以更改find csv
,使其不接受任何参数,而直接访问参数
另外,您的标志语法可能不太正确。你可能希望每一个都像这样:
[("-n" "--max-paths") max-arg
"Maximum number of file paths to return"
(max max-arg)]
注意添加的max arg
名称。您需要这样才能将参数实际设置为用户提供的值。在文档中,所有用于将标志设置传达给后续处理步骤(示例中未显示)的标志切换
因此,在您的特定情况下,您可以定义如下参数:
(define max (make-parameter 10000))
(define owner (make-parameter ""))
(define template (make-parameter "")
(define loc (make-parameter ""))
(define root (make-parameter "/home/wdkrnls"))
这里的参数是参数的默认值。然后,您可以使用参数值调用find csv
(通过将参数用作函数,如(max)
),也可以更改find csv
,使其不接受任何参数,而直接访问参数
另外,您的标志语法可能不太正确。你可能希望每一个都像这样:
[("-n" "--max-paths") max-arg
"Maximum number of file paths to return"
(max max-arg)]
注意添加的max arg
名称。您需要将参数实际设置为用户提供的值