在此处文档中具有 Hy 程序的 shell 脚本中使用 `click`
Using `click` in a shell script that has a Hy program in a here document
如何将以下使用带 shell + python repl
(我认为)的点击的工作示例转换为 hy
?
python3 - "$@" <<'EOF'
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
EOF
当我将以下 hy
示例与 ./test.sh --name shadowrylander --count 3
一起使用时,我得到:
Usage: hy [OPTIONS]
Try 'hy --help' for help.
Error: Got unexpected extra argument (-)
我什么时候应该得到:
Hello shadowrylander!
Hello shadowrylander!
Hello shadowrylander!
hy - "$@" <<'EOF'
(import click)
#@(
(.command click)
(.option click "--count" :default 1 :help "Number of greetings")
(.option click "--name" :prompt "Your name" :help "The person to greet.")
(defn hello
[count name]
"""Simple program that greets NAME for a total of COUNT times."""
(for [x (range count)]
(.echo click "Hello %s" % name)))
)
(if (= __name__ "__main__") (hello))
EOF
通常我可以毫无问题地使用hy - "$@" <<'EOF' ... EOF
。
我对 click
的了解还不够,无法调试它,但作为 Hy 开发人员,我可以验证错误消息是由 click
产生的,而不是由 Hy 自己的命令行产生的-hy.cmdline
中的参数处理。需要进行一些挖掘才能确定是否需要更改 click
或 Hy 才能使这项工作正常进行。我的猜测是 click
对 Hy 如何影响 sys.argv
或 Hy 如何部分取代 Python 解释器感到困惑。
您的 Hy 程序不太正确,因为它试图使用 %
作为中缀。 .echo
形式需要 (.echo click (% "Hello %s" name))
。通过此更改,Hy 代码保存到 test.hy
和 运行 并使用 hy test.hy --name shadowrylander --count 3
(而不是使用 shell 脚本作为中介),它按预期工作。
My guess is that click is confused by how Hy affects sys.argv or by how Hy partly replaces the Python interpreter.
根据,答案如下:
(import [sys [argv]])
(del (cut argv 0 1))
这将在 click
调用之前出现。
如何将以下使用带 shell + python repl
(我认为)的点击的工作示例转换为 hy
?
python3 - "$@" <<'EOF'
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
EOF
当我将以下 hy
示例与 ./test.sh --name shadowrylander --count 3
一起使用时,我得到:
Usage: hy [OPTIONS]
Try 'hy --help' for help.
Error: Got unexpected extra argument (-)
我什么时候应该得到:
Hello shadowrylander!
Hello shadowrylander!
Hello shadowrylander!
hy - "$@" <<'EOF'
(import click)
#@(
(.command click)
(.option click "--count" :default 1 :help "Number of greetings")
(.option click "--name" :prompt "Your name" :help "The person to greet.")
(defn hello
[count name]
"""Simple program that greets NAME for a total of COUNT times."""
(for [x (range count)]
(.echo click "Hello %s" % name)))
)
(if (= __name__ "__main__") (hello))
EOF
通常我可以毫无问题地使用hy - "$@" <<'EOF' ... EOF
。
我对 click
的了解还不够,无法调试它,但作为 Hy 开发人员,我可以验证错误消息是由 click
产生的,而不是由 Hy 自己的命令行产生的-hy.cmdline
中的参数处理。需要进行一些挖掘才能确定是否需要更改 click
或 Hy 才能使这项工作正常进行。我的猜测是 click
对 Hy 如何影响 sys.argv
或 Hy 如何部分取代 Python 解释器感到困惑。
您的 Hy 程序不太正确,因为它试图使用 %
作为中缀。 .echo
形式需要 (.echo click (% "Hello %s" name))
。通过此更改,Hy 代码保存到 test.hy
和 运行 并使用 hy test.hy --name shadowrylander --count 3
(而不是使用 shell 脚本作为中介),它按预期工作。
My guess is that click is confused by how Hy affects sys.argv or by how Hy partly replaces the Python interpreter.
根据
(import [sys [argv]])
(del (cut argv 0 1))
这将在 click
调用之前出现。