补全:给长度加 --from

长度换算还缺一个起点单位。补上 --from 选项(存到属性 src,默认 m),并让 length 用上它,输出 3 km 换成 m、5000 m 换成 km 的结果。

开始练习 →

结果和报错为什么分两条路

工具把换算结果打到标准输出,把错误信息打到标准错误。这样分开,最直接的好处是【0】。

开始练习 →

退出码几算成功

结果和报错挤进同一条管道 工具打出 下游程序 按 Unix 的约定,一个命令行工具正常完成任务时,退出码应该是【0】。

开始练习 →

非零退出码怎么分

结果和报错挤进同一条管道 工具打出 下游程序 conv 里定了三个错误码:用法错 2、不认识的单位 3、文件不存在 4。这样区分的用处是【0】。

开始练习 →

两条管道各接到了什么

下面这段程序用两个缓冲区模拟 stdout 和 stderr:结果进 out,提示进 err。运行它,看两条管道各接到几行、退出码是多少: import io out, err = io.StringIO(), io.StringIO()

开始练习 →

补全:把报错送进另一条管道

现在报错和结果混在同一条管道里。把两句提示改成打到 err(它扮演 stderr),让结果管道里只剩数字。成功那次会顺带打出 err 里攒了几行。

开始练习 →

补全:让 main 交回退出码

main 现在不管成败都交回 0。按约定改成:成功 0、缺参数 2、单位不认识 3。输出三次调用的退出码(用 / 拼)。

开始练习 →

补全:把结果格式定下来

结果有时打 37.0,有时打 98.60000000000001,看着不像个产品。补全 fmt:最多保留两位小数,去掉多余的尾零。输出三个数(用 / 拼)。

开始练习 →

补全:用退出码驱动调用方

另一段程序要调用 conv,它只看退出码:0 就把结果记下来,非 0 就记一次失败。补全 call,输出成功次数和失败次数。

开始练习 →

--help 是谁给的

没写过一行帮助代码,用户敲 conv --help 也能看到一段用法说明。这是因为【0】。

开始练习 →