单击:是否可以将多个输入传递给CliRunner.invoke?

时间:2017-06-04 03:02:17

标签: python python-2.7 command-line-interface python-click

我有一个名为Random的点击命令,在下载一系列文件之前会提示用户输入用户名和密码:

download

要测试此命令,我需要能够将$ python download.py Username: jkarimi91 Password: 1234 Download complete! username分别传递给passwordstdin方法有一个CliRunner.invoke()参数,但它不接受列表。是否可以将多个输入传递给input

1 个答案:

答案 0 :(得分:3)

您可以通过传递由换行符(\n)加入的字符串来传递多个输入:

import click
from click.testing import CliRunner


def test_prompts():
    @click.command()
    @click.option('--username', prompt=True)
    @click.option('--password', prompt=True)
    def test(username, password):
        # download ..
        click.echo('Download complete!')

    # OR
    #
    # @click.command()
    # def test():
    #     username = click.prompt('Username')
    #     password = click.prompt('Password', hide_input=True)
    #     # download ..
    #     click.echo('Download complete!')


    runner = CliRunner()
    result = runner.invoke(test, input='username\npassword\n') # <---
    assert not result.exception
    assert result.output.endswith('Download complete!\n')


if __name__ == '__main__':
    test_prompts()