命令行参数

301-golang之命令行参数os.Args

佐手、 提交于 2019-12-05 01:21:16
golang之命令行参数os.Args 我们先写一个小demo,test.go文件 func main() { cmds := os.Args for i, cmd := range cmds { fmt.Printf("cmd[%d] = %s \n", i, cmd) } } 然后我们在命令行运行 go run test.go 结果输出了 cmd[0] = C:\Users\ADMINI~1\AppData\Local\Temp\go-build142125990\b001\exe\test.exe 然后我们运行 go run test.go hello world 结果输出了 cmd[0] = C:\Users\ADMINI~1\AppData\Local\Temp\go-build052083198\b001\exe\test.exe cmd[1] = hello cmd[2] = world 然后我们看下os.Args // Args hold the command-line arguments, starting with the program name. var Args []string 我们发现Args是一个字符串切片 翻译一下 Args里面放的命令行的参数 第一个是项目名字 所以我们刚刚的 第一个参数是程序名字 第二个第三个都是我们输入的参数

Go语言_flag_Go的命令行参数 /命令行处理

时间秒杀一切 提交于 2019-12-05 01:19:42
原文来自 : http://studygolang.com/articles/2878 1.命令行参数(命令行参数是指定程序运行参数的一个常见方式。例如,go run hello.go,程序 go 使用了 run 和 hello.go 两个参数。) package main import " os " import " fmt " func main() { // os.Args 提供原始命令行参数访问功能。注意,切片中的第一个参数是该程序的路径,并且 os.Args[1:]保存所有程序的的参数。 argsWithProg := os.Args argsWithoutProg : = os.Args[ 1 :] // 你可以使用标准的索引位置方式取得单个参数的值。 arg := os.Args[ 3 ] fmt.Println(argsWithProg) fmt.Println(argsWithoutProg) fmt.Println(arg) } /* 要实验命令行参数,最好先使用 go build 编译一个可执行二进制文件 $ go build command-line-arguments.go $ ./command-line-arguments a b c d [./command-line-arguments a b c d] [a b c d] c */ 2.命令行标志

tf.app.flags.DEFINE_string()和tf.app.flags.FLAGS

时光总嘲笑我的痴心妄想 提交于 2019-12-05 01:19:27
在看SSD的TensorFlow源码(链接 点击打开链接 )时遇到了这tf.app.flags.DEFINE_string()函数和tf.app.flags.FLAGS变量,于是翻阅TensorFlow官网API结果竟然是。。。 真是相当于白说,意思还是让我自己看源码。。。。。。。 于是上网找,还是找到了Stack Overflow里的一个解答 点击打开链接 答案说其实这个,很多时候看TensorFlow的API文档不如看TensorFlow的源码更容易(真的么。。。),所以答主经常用pycharm打开TensorFlow源码的工程,这样能方便的找到答案。比如说你看要看 tensorflow/python/platform/flags.py 其实是个披着很薄的装饰的argparse.ArgumentParse()(什么是python的argparse,请看这里 点击打开链接 ),所以也还是得看python的argparse的API文档。 好吧,在我辛苦弄懂argparse也就是一个方便用户添加命令行的玩意之后,问题终于明了了。 我抽取了flags.py的几段程序 这里是import了argparse as _argparse 然后建立argparse一个全局对象_global_parser 定义了_FlagValues这个类,并使用前面定义的全局对象_global_parser,将

golang命令行参数解析

随声附和 提交于 2019-12-04 23:30:20
golang的命令行参数解析,推荐两种。一个是 os.Args ,另一个是使用 flag 模块 os.Args package main import ( "fmt" "os" ) func main() { args := os.Args //使用go run xx.go 1 2 3 xx aaa bbb ccc ddd eee //那么args就是[xx.exe 1 2 3 xx aaa bbb ccc ddd eee] //并且全部是string类型 fmt.Println(args) } flag flag模块可以支持使用关键字的方式指定参数 package main import ( "flag" "fmt" ) func main() { //flag.Type里面接受三个参数,指定的名字,默认值,描述信息 Name := flag.String("name", "mashiro", "姓名") Age := flag.Int("age", 16, "年龄") Has_bf := flag.Bool("has_bf", false, "有男朋友?") //解析 flag.Parse() /* 我们在命令行中便可以通过name satori age 16 has_bf false这种方式指定 当然还可以使用其他方式比如 --name satori, -name

go指针

左心房为你撑大大i 提交于 2019-12-04 21:24:10
go指针 Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。 指针(pointer)在Go语言中可以被拆分为两个核心概念: 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指向起始元素的原始指针、元素数量和容量组成。 受益于这样的约束和拆分,Go语言的指针类型变量即拥有指针高效访问的特点,又不会发生指针偏移,从而避免了非法修改关键性数据的问题。同时,垃圾回收也比较容易对不会发生偏移的指针进行检索和回收。 切片比原始指针具备更强大的特性,而且更为安全。切片在发生越界时,运行时会报出宕机,并打出堆栈,而原始指针只会崩溃。 C/C++中的指针 说到 C/C++ 中的指针,会让许多人“谈虎色变”,尤其是对指针的偏移、运算和转换。 其实,指针是 C/C++ 语言拥有极高性能的根本所在,在操作大块数据和做偏移时即方便又便捷。因此,操作系统依然使用C语言及指针的特性进行编写。 C/C++ 中指针饱受诟病的根本原因是指针的运算和内存释放,C/C++ 语言中的裸指针可以自由偏移

Python的OptionParser模块

只愿长相守 提交于 2019-12-04 13:59:00
Python中强大的选项处理模块。 示例 #!/usr/bin/pythonfrom optparse import OptionParser parser = OptionParser() parser.add_option("-f", "--file", dest="filename", help="write report to FILE", metavar="FILE") parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout") (options, args) = parser.parse_args() print options.filename,options.verbose 将上面代码保存到文件option1.py(名字随便),添加执行权限并运行: ./option1.py ./option1.py -f ./option1.py -f foo.txt ./option1.py -f foo.txt -q ./option1.py -qffoo.txt # 注意这个和下面对比 ./option1.py -fqfoo.txt ./option1.py --file

前端技术之:如何创建一个NodeJs命令行交互项目

☆樱花仙子☆ 提交于 2019-12-03 22:27:11
方法一:通过原生的NodeJs API ,方法如下: #!/usr/bin/env node # test.js var argv = process.argv; console.log(argv) 通过以下命令执行: node test.js param1 --param2 -param3 结果输出如下: [ '/usr/local/Cellar/node/10.10.0/bin/node', 'test.js', 'param1', '--param2', '-param3' ] 可见,argv中第一个参数为node应用程序的路径,第二个参数为被执行的js程序文件,其余为执行参数。 方法二:通过yargs获取命令行参数 ,方法如下: 首先,需要在项目中引入该模块: npm install --save args 然后,创建JS可执行程序,如下: #!/usr/bin/env node var args = require('yargs'); const argv = args.option('n', { alias : 'name', demand: true, default: 'tom', describe: 'your name', type: 'string' }) .usage('Usage: hello [options]') .example('hello -n

python argparse:命令行参数解析详解

六月ゝ 毕业季﹏ 提交于 2019-12-03 13:17:23
简介 本文介绍的是 argparse 模块的基本使用方法,尤其详细介绍 add_argument 内建方法各个参数的使用及其效果。 本文翻译自 argparse的官方说明 ,并加上一些笔者的理解 import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers)) 如上示例, argparse 模块的基本使用包含5个步骤: import模块: import argparse 获解析器对象: argparse.ArgumentParser 利用解析器对象内建方法

windows核心编程笔记-进程

匿名 (未验证) 提交于 2019-12-03 00:27:02
1.CreateProcess的第二参数如果是Unicode版本直接传入字符串常量会造成异常,因为CreateProcess会修改传递的命令行参数,如果传入的是ANSI版本,则不会,因为ANSI版本会先转换为UNICODE这会创建一个临时的副本,所以能够修改。 2.CreateProcess的命令行参数的命令行参数如果没有指定绝对路径就会按照一下顺序搜索可执行文件: 3.在CreateProcess时候可以指定LPSTARTUPINFOA结构为StartupInfoEx,并且指定dwCreateFlags为EXTENDED_STARTUPINFO_PRESENT,然后修改StartupInfoEx的lpAttributeList,这个结构体指针要用两次InitializeProcThreadAttributeList,第一次获取结构体大小,然后在堆上分配空间后再调用一次,初始化后调用UpdateProcThreadAttribute将第三个参数设置为PROC_THREAD_ATTRIBUTE_PARENT_PROCESS,第四个设置为要设置的父进程句柄,这样就可以更改CreateProcess创建的进程的父进程信息了。代码如下: #include<windows.h> #include<TlHelp32.h> #include<stdio.h> DWORD

getopt-解析命令行参数

匿名 (未验证) 提交于 2019-12-03 00:14:01
getopt 模块用于解析 sys中的命令行参数。支持unix的 getopt() 函数的功能,并且提供了一个函数 getopt(args,options[,long_options]) 解析命令行参数,要去掉开头的运行程序引用。所以通常将args赋值为 sys.argv[1:] 。options参数可以跟一串字母,每个字母表示一个选项,含有后续值的选项后面加个冒号。 long_options,格式是字符串列表,选项名中不需要包含前导的"--"。长选项需要在参数后附带"=",然后跟一个值。如果只希望接受长选项,可以把options设置成空字符串。长选项会尽可能长的识别, 返回值两个元素:一个(option,value)列表,剩余的未解析参数。每个(option,value)对返回时,选项名包含前导的"-"或"--",选项参数作为第二个参数,或者为空字符串。它们在返回列表中出现的顺序与在命令行出现的顺序相同。长短选项混合。 更多技术资讯可关注:gzicast 来源:博客园 作者: 爱哭鼻子的小忧伤 链接:https://www.cnblogs.com/heimaguangzhou/p/11670725.html