我有一个代码,我需要传递像终端名称这样的参数.这是我的代码以及如何传递参数.我收到一个"文件未找到"的错误,我不明白.
我在终端尝试了这个命令:pytest <filename>.py -almonds
我应该把这个名字打印成"杏仁"
@pytest.mark.parametrize("name")
def print_name(name):
print ("Displaying name: %s" % name)
Run Code Online (Sandbox Code Playgroud) 我可以在运行时传递命令行参数
python <filename>.py arg1
Run Code Online (Sandbox Code Playgroud)
但是当我尝试传递运行 pytest 的命令行参数时,它失败并给出如下错误。你能给些建议么。
pytest <filename>.py arg1
ERROR: file not found: arg1
Run Code Online (Sandbox Code Playgroud)
编辑:
例如,我正在考虑以这种方式使用它,假设我已经传递了一个参数并且正在通过 sys.argv 读取它:
import sys
arg = sys.argv[3]
def f():
return 3
def test_function():
assert f() == arg
Run Code Online (Sandbox Code Playgroud) 我有一个CLI工具,并且想测试是否提示用户确认选择input()。这等同raw_input()于在Python 2中使用。
测试的(释义)代码如下所示:
import sys
import argparse
def confirm():
notification_str = "Please respond with 'y' or 'n'"
while True:
choice = input("Confirm [Y/n]?").lower()
if choice in 'yes' or not choice:
return True
if choice in 'no':
return False
print(notification_str)
def parse_args(args):
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--destructive', action='store_true')
return parser.parse_args()
def main():
args = parse_args(sys.argv[1:])
if args.destructive:
if not confirm():
sys.exit()
do_stuff(args)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我正在使用pytest作为我的框架。我该如何做才能测试CLI中是否显示确认提示?如果我尝试比较,则会stdout收到错误:OSError: reading from stdin while …