服务计算:Go语言实现selpg

1.项目内容

使用Golang开发Linux命令行中的selpg

2.设计说明

2.1引入所需要的包

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"os/exec"
	flag "github.com/spf13/pflag"
)

io,实现了一系列非平台相关的 IO 相关接口和实现,比如提供了对 os 中系统相关的 IO 功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。

os/exec,执行外部命令,它包装了 os.StartProcess 函数以便更容易映射到 stdin 和 stdout,并且利用 pipe 连接 I/O。

bufio,在 io 的基础上提供了缓存功能。在具备了缓存功能后, bufio 可以比较方便地提供 ReadLine 之类的操作。

os,提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。

fmt,实现格式化的输入输出操作,其中的 fmt.Printf() 和 fmt.Println() 是开发者使用最为频繁的函数。

pflag,提供命令行参数的规则定义和传入参数解析的功能。绝大部分的 CLI 程序都需要用到这个包。

2.2创立结构体

type sp_args struct {
	start_page  int //开始页码 
	end_page    int //结束页码
	in_filename string // 文件名
	page_len    int // 每一页的大小
	page_type   int // 页类型
	print_dest  string // 打印目的地
}

2.3main函数

func main() {
	sa := sp_args{-1, -1, "", 3, 'l', ""} //创建结构体数据
	progname = os.Args[0] 
	process_args(len(os.Args), os.Args, &sa)
	process_input(sa)
}

2.4process_args函数

主要是用于处理输入时候的各种错误,比如起始页码是负数,终止页码小于起始页码等情况,增加程序的健壮性。详见代码

2.5process_input函数

用来对文件的内容进行处理,根据后缀参数的类型完成操作。详见代码

3.程序测试

test.txt为准备好的数据文件,内容为数字001-050,每个一行。程序默认3行为一页。
out.txt与error.txt为空白文件

3.1 selpg -s1 -e5 test.txt

把test.txt的前5页内容输出到屏幕
显示前五页内容

3.2 selpg -s1 -e5 < test.txt

selpg 读取标准输入,而标准输入已被 shell/内核重定向为来自“test.txt”而不是显式命名的文件名参数。输入的前5页被写至屏幕。

在这里插入图片描述

3.3 hello | selpg -s1 -e2

hello程序的标准输出被 shell/内核重定向至 selpg 的标准输入。将第 1 页到第 2 页写至 selpg 的标准输出(屏幕)。
在这里插入图片描述

3.4 selpg -s1 -e6 -l2 test.txt > out.txt

selpg 将前6页(2行为一页)写至标准输出;标准输出被 shell/内核重定向至“out.txt”。
在这里插入图片描述

3.5 selpg -s3 -e5 -l15 test.txt 2>error.txt

selpg 将第 3 页到第 5 页(15行为一页)写至标准输出(屏幕);所有的错误消息被 shell/内核重定向至“error.txt”。请注意:在“2”和“>”之间不能有空格;这是 shell 语法的一部分
在这里插入图片描述

3.6 selpg -s3 -e5 -l15 test.txt >out.txt 2>error.txt

selpg 将第 3 页到第 5 页(15行为一页)写至标准输出(标准输出被 shell/内核重定向至“out.txt”);所有的错误消息被 shell/内核重定向至“error.txt”。
在这里插入图片描述

4.参考资料

Golang之使用Flag和Pflag
开发Linux命令行实用程序
大佬的博客


最后悄悄给上自己的github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值