Python 将sys.arvg与列表进行比较

Python 将sys.arvg与列表进行比较,python,linux,Python,Linux,所以我要做的是将一个终端参数与代码中的列表进行比较 例如,我将在“python./mycode.py-name”中输入一个命令 因此,我想将参数名与代码中的列表进行比较 目前看起来是这样的: reqArgs = ["-name", "-age", "-date"] for arg in sys.argv: for req in arg: if req in reqArgs: print "Sucess" else: print "not workin

所以我要做的是将一个终端参数与代码中的列表进行比较

例如,我将在“python./mycode.py-name”中输入一个命令

因此,我想将参数名与代码中的列表进行比较

目前看起来是这样的:

reqArgs = ["-name", "-age", "-date"]

for arg in sys.argv:
  for req in arg:
    if req in reqArgs:
      print "Sucess"
    else:
      print "not working"

我知道我离这里不远。我缺少什么?

您只需要一个循环,reqArgs应该是字符串

reqArgs = ['-name', '-age', '-date']

for arg in reqArgs:
    if arg in sys.argv:
      print "Success"
    else:
      print "not working"
更好的解决方案:

req_args = ['-name', '-age', '-date']
found_all_req_args = all(arg in sys.argv for arg in req_args)
更好的是:

我错过了什么

您缺少
argparse
。使用argparse进行参数解析,您将获得自动帮助消息、缺少所需参数时的合理错误消息以及一致的用户界面

考虑使用三个必需参数执行此程序:

#!/usr/bin/env python

import argparse
import dateutil.parser
parser = argparse.ArgumentParser(description='The Constant Frobulator')
parser.add_argument('-name', required=True,
                    help='The name of frobulator')
parser.add_argument('-age', required=True,
                    type=int,
                    help='The age of frobulator')
parser.add_argument('-date', required=True,
                    type=dateutil.parser.parse,
                    help='The precise date frobulation began')
args = parser.parse_args()
print(args)
该程序的功能演示如下:

$。/myprog
用法:myprog[-h]-姓名-年龄-日期
myprog:错误:参数-名称是必需的
美元/myprog-h
用法:myprog[-h]-姓名-年龄-日期
恒流器
可选参数:
-h、 --帮助显示此帮助消息并退出
-name frobulator的名字
-frobulator的年龄
-日期开始的确切日期
美元/myprog-姓名乔治-47岁-日期“2016年3月5日”
命名空间(age=47,date=datetime.datetime(2016,3,5,0,0),name='George')
美元/myprog-姓名乔治-47.5岁-日期“2016年3月5日”
用法:myprog[-h]-姓名-年龄-日期
myprog:错误:参数-年龄:无效的int值:“47.5”
美元/myprog-名称乔治-日期“2016年3月5日”
用法:myprog[-h]-姓名-年龄-日期
myprog:错误:参数-年龄是必需的

对于arg中的req:
?嗯?这将是一个字符一个字符地迭代——首先是
-
,然后是
n
,然后是
a
,等等。除非您有amen类型的变量名为
name
age
date
,否则解释器甚至不会接受您的第一个赋值能够求反。
reqArgs
应该是列表中的字符串,对吗?你能编辑它以包含实际代码,如果字符串周围有引号吗?无论如何,解析参数的最佳实践方法是使用。尽早学习它会对你有好处。@Charles Duffy我遇到过argparse,但我不是su如果这就是我要找的。我会仔细看一看。谢谢。这就解决了。非常感谢!!然后请接受回答。我会尽快回答。说我必须再等4分钟。谢谢,这太好了。我正在阅读argparse,对它不是很清楚,但这很好地解决了问题。