我想学习使用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参数),没有输出换行符,因此不打印点号。查看屏幕截图:
怎么了,我怎么才能通过测试?我的程序根本不打印中间点。
问题似乎完全出在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