在Python代码的NPM测试中,行终止符在行尾添加圆点

问题描述

我想学习使用Python进行命令行编程。 我在互联网上看到了一个待办事项挑战,并开始通过向网络学习来应对它。挑战在于创建待办事项应用程序的命令行界面。

该挑战的标题为CoronaSafe工程奖学金测试问题。以下是Google Drive上的挑战材料:https://drive.google.com/drive/folders/1SyLcxnEBNRecIyFAuL5kZqSg8Dw4xnTG?usp=sharing 并且在https://github.com/nseadlc-2020/package-todo-cli-task/

有一个GitHub项目 在README.md中,指示我为名为todo的批处理文件todo.bat创建符号链接。现在,我的第一个条件是,在没有任何参数的情况下从命令提示符调用符号链接时,它必须打印程序的一些使用提示。最后,我必须使用npm test命令来测试执行。

一开始我遇到了这个问题,每当我使用print语句时,我看到每个以新行结尾的字符串的末尾都有一个点·。例如,

import sys
import random

args = sys.argv[1:]

if len(args) == 0:
    print('Usage :-', end='
')
    print('$ ./todo help             # Show usage', end='')

上面的语句在不带参数的情况下执行时会给出输出

Usage :-.
$ ./todo help             # Show usage

这里,我注意到第一个print语句以换行符结尾,字符串以中点(·)结尾。然而,对于第二个print语句,因为我用空字符串覆盖了end参数,所以没有输出换行符,因此不会打印点。查看屏幕截图:

出了什么问题,我怎么才能通过测试?我的程序根本不打印中间点。


解决方案

问题似乎就在todo.test.js文件中。

简而言之,Windows和类Unix平台有不同的行尾约定(在Windows中打印一行在末尾添加两个控制字符,而在类Unix系统中只打印一个),而且测试套件似乎只准备好处理类Unix系统的结果。

尝试强制您的Python仅打印Unix换行符,或切换到免费的类Unix系统以运行测试。

或者,重命名todo.test.js并将其替换为带有DOS换行符的副本。在许多Windows文本编辑器中,您应该能够简单地将文件打开为Unix文本文件,然后另存为...&q;并选择Windows文本文件(如果它提供,则可能选择Windows文本文件,尽管这个术语是错误的,他们应该知道得更清楚);有关许多替代解决方案,例如,请参阅Windows command to convert Unix line endings?(其中许多都生动地说明了Windows的其他一些问题;请谨慎操作)。

这似乎是一个已知问题,如您共享的README.md中所述:https://github.com/nseadlc-2020/package-todo-cli-task/issues/12(尽管它不准确地将此标记为换行符UTF编码问题;该问题与UTF-8或UTF-16无关)。

另请参阅建议的副本Line endings (also known as Newlines) in JS strings

相关文章