×

getopt函数windows

getopt函数windows(getoptlong函数)

admin admin 发表于2023-03-23 12:16:10 浏览63 评论0

抢沙发发表评论

本文目录一览:

getopt函数,没有选项的话,怎么输入参数

getopt在win32、64位环境下都是可以使用,只要包含stdlib.h,使用_argc,__argv两个参数即可,下面示例:

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

Test(__argc,__argv);

return 0;

}

上面的代码同样适用于BCB6。

如何使用python脚本实现对windows系统监控

示例:

#!/usr/bin/env python

# encoding: utf-8

"""

MonitorLog.py

Usage: MonitorLog.py ...

Monitor the log file

-f  log file

-h  help info

python MonitorLog.py -f C:\monitor.log

Created by zhoubo on 2011-08-29.

"""

import sys

import os

import getopt

import subprocess

import time

import codecs

import winsound

ABSPATH = os.path.dirname(os.path.abspath(__file__))

MONITERCONF = 'moniter_keyword.txt' #utf8 file

def main():

    try:

        opts, args = getopt.getopt(sys.argv[1:], 'hf:')

    except getopt.GetoptError, err:

        print str(err)

        print __doc__

        return 1

    path = ''

    for k, v in opts:

        if k == '-f':

            path = v

        elif k == '-h':

            print __doc__

            return 0

    if not (path and os.path.exists(path)):

        print 'Invalid path: %s' % path 

        print __doc__

        return 2

    #命令行元组

    cmd = ('tail', '-f', path)

    print ' '.join(cmd)

    output = subprocess.Popen(cmd, stdout=subprocess.PIPE)

    keywordMap = {}

    #加载监控的关键字信息

    with codecs.open(os.path.join(ABSPATH, MONITERCONF), 'r', 'utf8') as f:

        lines = f.readlines()

    for line in lines:

        line = line.strip()

        if not line:

            continue

        keyword, wav = line.strip().split(':')

        keywordMap[keyword] = wav

    while True:

        line = output.stdout.readline()

        #process code,得到输出信息后的处理代码

        if not line:

            time.sleep(0.01)

            continue

        line = line.strip().decode('utf8')

        print line

        for keyword in keywordMap:

            if line.find(keyword)  -1:

                winsound.PlaySound(keywordMap[keyword], 

                                   winsound.SND_NODEFAULT)

        #time.sleep(0.01)

    return 0

if __name__ == '__main__':

    sys.exit(main())

解析命令行参数的函数

1.全局变量解释:

optarg: 如果选项带参数,参数保存在optarg中。如果选项带可选参数,而实际无参数时,optarg为NULL。

optind:argv数组中下一次需要处理的元素的下标,系统默认初始化此值为1. 0是没有意义的,argv[0]为程序名,在解析命令行参数中是没有意义的。getopt正常解析完毕后,optind设置为argv数组中第一个不是选项的元素的下标(一般为0)。 -getopt函数windows

opterr:存储错误选项字符.

2. GNU/Linux的命令行选项有两种类型: 短选项和长选项 ,前者以 '-' 作为前导符,后者以 '--' 作为前导符。 -n 表示是一个不带参数的短选项。 --n 表示是一个不带参数的长选项。现在有一个带有参数的短选项比如说 -w foo ,那么它和长选项 --foo 是等价的。-getopt函数windows

函数声明:

函数参数:

1.argc:主函数传递过来的实参

2.argv:主函数传递过来的实参

3.optstring:一个包含选项字符的字符串。 一组短选项组成的字符串

函数调用结果

1.该函数每解析完一个选项,就返回该选项字符。选项字符解析完毕后,调用getopt函数将会返回-1,然后optind设置为argv数组中第一个不是选项的元素的下标。

2. 当调用getopt函数检测到错误时(比如说检测到的选项字符不在optstring实参中),默认情况下函数返回'?'。 为什么说是默认呢?因为如果通过optstring实参指明选项带参数,而实际命令行没有参数时,getopt返回 ':' 而不是 '?' -getopt函数windows

关于optstring,还有几点说明:

1.如果选项带参数,该选项后接冒号,比如optstring这个实参值为"a:b",指示a带参数,b没有参数;

2.如果选项带可选参数,该选项后接两个冒号,比如"a::b",表明a可能有参数,也可能没有;

3.如果optstring的开头字符为':',表明如果指明选项带参数,而实际命令行没有参数时,getopt返回':'而不是'?'(默认情况下返回 '?' ,和无法识别的参数返回一样);

4.如果optstring的开头字符为'+',表明一但遇到一个非选项参数,马上停止扫描,随后的部分当作参数来解释;

5.如果optstring的开头字符为'-',表明如果遇到无选项参数,则把它当作选项1(不是字符'1')的参数

示例:(来源于man文档)

运行示例:

函数声明:

函数参数:

longops:指向一个option结构体数组的第一个元素。

longindex:getopt_long的最后一个参数longindex在函数返回时指向被搜索到的选项在longopts数组中的下标。

关于option struct如下:

注意在初始化option struct时: The last element of the array has to be filled with zeros.

函数返回值:

1.如果flag这个实参为null,那么这个函数返回val的值。 这样短选项字符解析和长选项解析搭建了桥梁。

2.如果flag这个实参不为null,那么这个函数返回0

3.选项字符解析完毕后,调用getopt_long函数将会返回-1

4.当调用getopt_long函数检测到错误时(比如说检测到的选项字符不在longops实参中),默认情况下函数返回'?'

示例:(来源于man 文档)

运行示例如下:

getopt_long_only类似于getopt_long,但是它把 '-' 开头的选项当作长选项来处理。如果该选项与长选项不匹配,而与短选项匹配,则可以作为短选项解析。

在Windows下有代替getopt的函数吗

getopt在win32、64位环境下都是可以使用,只要包含stdlib.h,使用_argc,__argv两个参数即可,下面示例:

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

Test(__argc,__argv);

return 0;

}

上面的代码同样适用于BCB6。

windows下如何实现getopt_long

解决方法是从选择Software Development,然后选择GNU C的标准库,找到getopt源码,然后放到VC里编译一下,真的没别的办法

getopt 函数中参数的意思

这里的char **argv是一个指针数组,是存放你所输入的命令行的各个单词的,int argc存放单词的个数。例如,你输入的是copy file1 file2,则有argc里面是3,argv中是存放的就是指向这3个字符串的指针,即为一个有三个指针元素的数组{"copy","file1","file2"}。-getopt函数windows