在python中验证sys.argv []参数

问题描述

我在python脚本中使用sys.argv []参数。

val=sys.argv[1]

Print (val)

因此,在这里,我的sys.argv [1]值为文本。我需要验证其文字还是其他内容。我搜寻了一下,发现argparse可以帮助我进行这种测试。但是我听不懂。有人可以帮我吗?

解决方法

与大多数编程任务一样,有几种方法可以解决此问题:

  1. 手动解析
import sys
import os.path


def show_help():
   print("Help screen...")

flag_set=False  # default to off
outfile="out.txt"
infile="in.txt"

i = 1  # 0 is the filename of the script
while i < len(sys.argv):
   arg = sys.argv[i]
   i += 1

   if arg == "-h" or arg == "--help":
       show_help()
       sys.exit(0)
   elif arg == "-f" or arg == "--flag":
       flag_set=True
   elif arg == "-o" or arg == "--outfile":
       outfile=sys.argv[i]  # ignoring len check for brevity
       i += 1
   elif arg == "-i" or arg == "--infile":
       infile=sys.argv[i]  # ignoring len check for brevity
       # Simple parameter validation
       if not os.path.exists(infile):
           print("Input file '",infile,"' not found.")
           sys.exit(0)
       i += 1
   # ... for any other args you want

if flag_set:
    print("Flag was set")

print("Reading from:",infile)
print("Outputting to:",outfile)

您可以使用诸如此类的简单逻辑进行任何所需的验证。

  1. 方便的库(例如argparse)

https://docs.python.org/3/library/argparse.html

没有“错误”的方法来完成此任务,请使用为您完成工作的任何方法!但是请务必坚持使用标准标志,例如-h寻求帮助,等等。

,

使用正则表达式。例如,如果您只想允许字母,数字和空格:

import re

if re.search(r'[^a-z\d\s]',sys.argv[1],re.I):
    print("Invalid argument")
    sys.exit()