提问者:小点点

行结束符在Python代码的npm测试中在行尾添加点


我想学习使用Python的命令行编程。我在互联网上看到了一个待办事项的挑战,于是开始从网络上学习来解决这个问题。挑战是创建一个待办应用程序的命令行界面。

这项挑战的题目是CoronaSafe工程研究金试验问题。下面是Google Drive上的挑战材料:https://drive.Google.com/drive/folders/1sylcxnebnrecyfaul5kzqsg8dw4xntg?usp=sharing,还有一个GitHub项目,网址是https://GitHub.com/nseadlc-2020/package-todo-cli-task/

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

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

import sys
import random

args = sys.argv[1:]

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

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

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

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

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


共2个答案

匿名用户

问题似乎完全出在todo.test.js文件中。

简而言之,Windows和类unix平台有不同的行结束约定(在Windows中打印一行会在末尾添加两个控制字符,而在类unix系统中只打印一个),看起来测试套件只是为了处理类unix系统的结果而准备的。

尝试强制您的Python只打印Unix行提要,或者切换到一个免费的类似Unix的系统来运行测试。

或者,将重命名为todo.test.js,并将其替换为带有DOS行提要的副本。在许多Windows文本编辑器中,您应该能够简单地将文件作为Unix文本文件打开,然后“另存为。。。”选择“Windows文本文件”(如果它提供“ANSI”,可能选择“ANSI”,尽管这个术语是非常错误的,他们应该更清楚);例如,请参阅转换Unix行尾的Windows命令?对于许多替代解决方案(其中许多方案生动地说明了Windows的一些其他问题;请谨慎行事)。

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

另请参阅JS字符串中建议的重复行尾(也称为换行)

匿名用户

为什么要有多个打印,当python打印可以合并新行而不必单独声明时,请遵循下面的示例:

print("Usage :- \n$ ./todo help    #Show usage")  

输出:

Usage :- 
$ ./todo help    #Show usage