17.1 命令行-输入与输出、命令行参数、命令行标志

news2024/11/26 19:25:40

1. 输入与输出

命令行程序被设计为在终端运行。在图形用户界面(GUI)问世以前的年代,命令行程序是与计算机交互的唯一方式。

即便是在图形用户界面大行其道的当今,对程序员和系统管理员来说,命令行程序依然是一种流行而实用的与底层操作系统交互的工具。

命令行程序通常执行这样的操作:接受用户输入的数据,打印一些输出结果。

命令行程序可用任何语言编写,只要它是可执行的,就可以在终端中运行它:

  • 以交互的方式运行
  • 以批量的方式运行:脚本程序
  • 按照定时自动运行
  • 操作系统后台运行:随系统启动而启动,在后台静默运行

命令行程序与外界交互的界面就是终端。终端的I/O通道包括标准输入标准输出标准错误。

名称

代码

描述

标准输入

0

程序读取数据的来源,默认键盘

标准输出

1

程序写入数据的目标,默认屏幕

标准错误

2

程序报告错误的目标,默认屏幕

标准输入、标准输出和标准错误都有默认设备与之关联,但借助操作系统的I/O重定向,也可将其关联到其它设备,比如磁盘文件。

  • cat 0<in 1>out 2>err // 分别将标准输入,标准输出和标准错误重定向至in, out, err文件,0,1,2为三者的标准设备代码。其中,标准输入与标准输出的标准设备代码可缺省
  • cat <in >>out 2>>err // >表示更新文件中的内容;>>表示在保留原文件内容的前提下,更新文件中的内容;
  • cat <in >>out 2>>&1 // 可以引用标准设备代码,&1,在此表示,将标准错误重定向至“标准输出”文件。

2. 命令行参数

命令行程序可以通过命令行参数接收用户的输入数据。

  • main.exe windows macos linux

标准库os包里的导出变量Args是一个字符串切片,其中保存了命令行程序的文件路径和传递给命令行程序的每一个参数。

  • os.Args:
    • +----------+---------+-------+-------+
    • | main.exe | windows | macos | linux |
    • +----------+---------+-------+-------+
    •       0            1          2        3

遍历命令行程序文件路径和每一个命令行参数。

  • for _, arg := range os.Args { ... }
// 访问命令行参数
// 要读取命令行程序的参数,可使用标准库的os包
package main

import (
    "fmt"
    "os"
)

func main() {
    for i, arg := range os.Args {
        fmt.Println(i, arg)
    }
}
// 打印输出:
PS G:\GoWorkspace\src\cli\args> ./main.exe windows macos linux 
 0 G:\GoWorkspace\src\cli\args\main.exe
 1 windows
 2 macos 
 3 linux 

 3.命令行标志

命令行参数通常包含多个标志,每个标志由标志名和可选的标志值组成.

  • 如果用户所提供的命令行参数中没有包含某个标志,则其标志值取默认值。
  • main.exe -name Susan -age 30 -female  -female没有给出标准值,采用默认值

如果用户所提供的命令行参数不正确或使用了帮助标志,则显示帮助信息。

Usage of main.exe: 

        -age int 

                Your age (default 20)

        -female

                You are female

          -name string

                Your name (default "Anonymous")

标准库中的flag包提供了比os包更多用于解析命令行参数的功能。

  • 指定标志的数据类型
  • 设置标志的默认取值
  • 生成标志的帮助信息

例如:为了从命令行标志中获取名为s的string型标志值。

                           s := flag.String("s", "Hello World!", "Greeting message")

      // flag.String()返回值s为string型指针

     flag.Parse() // 解析命令行,s指向命令行参数中的参数值golang

                           fmt.Println(*s)     // golang,s是一个指针,指向标志名为s的标志值

                           main.exe -s golang

// 解析命令行标志
// 借助标准库的flag包解析命令行标志 
// 标志指针 = flag.String(标志名, 默认值, 帮助文本) 
// flag.Parse() 
// 命令 -标志名 标志值[默认值] 
//            	   ^ 
//            	   | 
//	           标志指针
package main
import (
    "flag"
    "fmt"
)
func main() {
    s := flag.String("s", "Hello World!",
        "Greeting message")
    flag.Parse()
    fmt.Println(*s)
}
// 打印输出:
 PS G:\GoWorkspace\src\cli\flag> ./main.exe -s golang // 我们输入
 golang // 程序的输出,成功解析命令行标志值

 PS G:\GoWorkspace\src\cli\flag> ./main.exe -h // 我们输入
 Usage of G:\GoWorkspace\src\cli\flag\main.exe:	// -h打印帮助信息
   -s string
         Greeting message (default "Hello World!") // 显示我们定义的帮助信
													   // 息和默认值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Amazon云计算AWS(二)

目录 三、简单存储服务S3&#xff08;一&#xff09;S3的基本概念和操作&#xff08;二&#xff09;S3的数据一致性模型&#xff08;三&#xff09;S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB&#xff08;一&#xff09;非关系型数据库与传统关系数据库的比较&…

【WPF编程宝典】第8讲:形状、画刷和变换

本讲介绍了WPF中的基本形状&#xff0c;包括矩形、椭圆形、直线、折线、多边形、点划线等。还介绍四类画刷的使用。介绍了形状的旋转及移动等变化&#xff0c;元素的旋转及移动等。最后介绍了透明。 1.形状 WPF支持的形状有&#xff1a;Rectangle&#xff0c;Ellipse&#xff…

代码签名证书申请流程

在当今的软件开发与分发过程中&#xff0c;确保代码的安全性和可信度变得至关重要。代码签名证书作为这一安全机制的重要组成部分&#xff0c;不仅帮助开发者保护其软件免遭恶意篡改&#xff0c;也为用户提供了验证软件来源和完整性的手段。 一、什么是代码签名证书 代码签名…

【MySQL】数据库的增删查改

文章目录 前言1. 新增1.1 全插入1.2 指定某些列名插入1.3 多行插入1.4 边查询边插入 2. 约束2.1 非空约束2.2 唯一性约束2.3 默认值约束2.4 主键约束2.5 外键约束2.6 check 约束2.7 外键的逻辑删除 3. 查询 - 初阶3.1 全列查询3.2 指定列查询3.3 指定表达式查询3.4 别名查询3.5…

基于不确定性的相互学习 用于联合医学图像分类和分割

文章目录 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation摘要方法实验结果 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation 摘要 该论文提出了一种基于不确定性的相互学习…

互联网轻量级框架整合之SpringMVC初始化及各组件工作原理

Spring MVC的初始化和流程 MVC理念的发展 SpringMVC是Spring提供给Web应用领域的框架设计&#xff0c;MVC分别是Model-View-Controller的缩写&#xff0c;它是一个设计理念&#xff0c;不仅仅存在于Java中&#xff0c;各类语言及开发均可用&#xff0c;其运转流程和各组件的应…

华为机考入门python3--(33)牛客33-图片整理

分类&#xff1a;排序 知识点&#xff1a; 对字符串中的字符ASCII码排序 sorted(my_str) 题目来自【牛客】 def sort_images(s):# 可以使用ord(A)求A的ASCII值&#xff0c;需要注意的是A的值&#xff08;65&#xff09;比a的值小&#xff08;97&#xff09;sorted_images …

QT4-QT5升级(3)GBK-UTF-8-乱码“常量中有换行符”

乱码有两种&#xff1a;我命名为汉字乱码菱形乱码如下&#xff1a; 1.文件编码为&#xff1a; GB2312 打开编码&#xff1a; GB2312 编译后&#xff1a; QString 部分字符串 常量中有换行符 char * …

【WEEK15】 【DAY3】定时任务【中文版】

2024.6.5 Wednesday 接上文【WEEK15】 【DAY2】【DAY3】邮件任务【中文版】 目录 17.异步、定时、邮件任务17.3.定时任务17.3.1.两个注解&#xff1a;17.3.2.Cron表达式17.3.3.修改Springboot09TestApplication.java开启定时功能的注解17.3.4.新建ScheduledService.java17.3.5.…

操作系统教材第6版——个人笔记5

3.2 单连续分区存储管理 3.2.1 单连续分区存储管理 单连续分区存储管理 每个进程占用一个物理上完全连续的存储空间(区域) 单用户连续分区存储管理固定分区存储管理可变分区存储管理 单用户连续分区存储管理 主存区域划分为系统区与用户区设置一个栅栏寄存器界分两个区域…

搜索与图论:有向图的拓扑序列

搜索与图论&#xff1a;有向图的拓扑序列 题目描述参考代码 题目描述 输入样例 3 3 1 2 2 3 1 3输出样例 1 2 3 参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e…

城镇污水处理设施运维服务认证

初次申请认证时需提交的文件/资料 1、通用文件/资料(证明文件复印件需签字盖公章) ☐ 营业执照复印件、统一社会信用代码/组织机构代码证复印件 ☐ 增值税一般纳税人资格证复印件&#xff0c;或其他增值税一般纳税人资格认定文件复印件 ☐ 资质 或 许可证 复印件&#x…

Mac屏幕截图软件

一、简介&#xff08;有小伙伴留言说想要mac的屏幕截图软件&#xff0c;今天给大家分享一个还不错的&#xff09; 1、一个功能丰富的功能丰富的截图工具&#xff0c;具有许多高级功能&#xff0c;免费。用于快速拍摄并将它们组织成集合。Snappy还支持注释&#xff0c;共享&…

基于Vue的前端瀑布流布局组件的设计与实现

摘要 随着前端技术的不断演进&#xff0c;复杂业务场景和多次迭代后的产品对组件化开发提出了更高的要求。传统的整块应用开发方式已无法满足快速迭代和高效维护的需求。因此&#xff0c;本文将介绍一款基于Vue的瀑布流布局组件&#xff0c;旨在通过组件化开发提升开发效率和降…

免费插件集-illustrator插件-Ai插件-文本对象合并

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行文本对象合并。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&…

树莓派与 Hailo 合作推出 AI套件

Raspberry Pi 与 Hailo Raspberry Pi 与 Hailo 公司合作开发&#xff0c;推出了一款售价 70 美元的扩展套件 它提供了一种便捷的方法&#xff0c;可将本地高性能、高能效推理集成到各种应用中&#xff0c;适用于 Raspberry Pi 5。 Raspberry Pi AI Kit 搭载了最新发布的 Ras…

k8s牛客面经篇

k8s的pod版块: k8s的网络版块: k8s的deployment版块: k8s的service版块: k8s的探针板块: k8s的控制调度板块: k8s的日志监控板块: k8s的流量转发板块: k8s的宏观版块:

PyQt5学习系列之基础知识“字典”

PyQt5学习系列之基础知识——字典” 啰嗦字典使用字典取值与赋值其他使用 总结 啰嗦 在项目中使用到解析数据存放在字典中&#xff0c;对字典中的数据进行数据转化。即需要使用到字典&#xff0c;并对字典中的数据取值。 字典 一种可变容器模型存储任意类型对象每个键值对&am…

德勤:税务合规要求下的税务技术应用分析

随着全球税务环境的不断变化&#xff0c;企业面临的税务合规压力日益增加。为应对复杂的税务法规和合规要求&#xff0c;企业需要依赖先进的税务技术&#xff0c;以确保税务数据的准确性和及时性&#xff0c;优化税务管理流程&#xff0c;提高税务透明度&#xff0c;并降低税务…

22. 计算机网络 - 物理层

通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号是连续的信号&#xff0c;数字信号是离散的…