问题描述
我在python脚本中使用sys.argv []参数。
val=sys.argv[1]
Print (val)
因此,在这里,我的sys.argv [1]值为文本。我需要验证其文字还是其他内容。我搜寻了一下,发现argparse可以帮助我进行这种测试。但是我听不懂。有人可以帮我吗?
解决方法
与大多数编程任务一样,有几种方法可以解决此问题:
- 手动解析
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)
您可以使用诸如此类的简单逻辑进行任何所需的验证。
- 方便的库(例如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()