Python需要获取lin命令的参数

2024-09-29 22:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所有人

我有一个我想写的个人脚本,但我遇到了一个小问题。问题是我希望能够支持一个'-s'参数,不管这个参数在哪里。我也希望这个论点被允许不止一次。例如:

在脚本.py第一个参数第二个参数-s第三个参数-s第四个第五个参数-s第六个参数

我试过的都没用。我试过以下方法:

currentArg = 1
foldername = sys.argv[1:]
for folders in foldername:
   if "-s" in folders:
   newArg = currentArg + 1
   setType = str(sys.argv[newArg])
   function(setType)

它所做的是将-s作为参数,并将其传递给函数。我想让它在上面看到第一个'-s'在第四个位置,加上1到4,然后setType被设置为系统argv[5] 一。我还希望它继续循环遍历参数并找到任何'-s',然后使用下一个参数作为值。有什么想法吗?在

我得到的错误是:

^{pr2}$

请注意,它将-s视为参数,并尝试将其作为文件夹传递,但我希望它将下一个参数作为文件夹传递。。。在

有更好的方法吗?我需要把所有的“-s”都考虑进去。。。在


Tags: 方法inpy脚本文件夹参数sysfolders
3条回答

参见其他解决方案:

args = ['firstargument', 'secondargument', '-s', 'thirdargument', '-s', 'fourth', 'fifth', '-s', 'sixth', 'seventh']
args1 = ['firstargument', 'secondargument', '-s', 'thirdargument', '-s', 'fourth', 'fifth', '-s', 'sixth', 'seventh', '-s']

marker = "-s"
def parser(arglist):
    scraplist, result = [], []
    arglist_range = range(len(arglist))
    #Remember candidates for exclude. It's your marker and previous element.
    for arg in arglist_range:
        if arglist[arg] == marker:
            scraplist.append(arg - 1)
            scraplist.append(arg)
    #Excluding marked elements
    for arg in arglist_range:
        if (not arg in scraplist):
            result.append(arglist[arg])
    return result

print parser(args)
print parser(args1)

运行它:

^{pr2}$

好的练习能得到你想要的结果。例如: input=['some','input','data'] output=['some','correct','output']

argparse很漂亮。重新设计命令行界面,或者编写自己的CLI解析器。CLI示例:

args = ['firstargument', 'secondargument', '-s', 'thirdargument', '-s', 'fourth', 'fifth', '-s', 'sixth']
last_arg = None
container = []
marker = '-s'
for arg in args:
    if (arg != marker): last_arg = arg
    else: container.append(last_arg) 
print container        

执行结果:

^{pr2}$

首先要说的是:

import sys
import getopt

def some_function(*args):
    print "Got", args
    return None

funct_dict = \
{
    "-s" : some_function,
    "--skip" : some_function
}
safety_dance = lambda *x: None

try:
    optlist, args = getopt.getopt(sys.argv[1:], "s:", ["--skip="])
except getopt.GetoptError:
    print "Das ist verboten"
    sys.exit()

for (key, option) in optlist:
    funct_dict.get(key, safety_dance)(option)

相关问题 更多 >

    热门问题