我是Python新手,几乎不知道列表和元组。我有一个程序要执行,它以几个值作为输入参数。下面是输入参数的列表
parser = argparse.ArgumentParser()
parser.add_argument("server")
parser.add_argument("outdir")
parser.add_argument("dir_remove", help="Directory prefix to remove")
parser.add_argument("dir_prefix", help="Directory prefix to prefix")
parser.add_argument("infile", default=[], action="append")
options = parser.parse_args()
程序可以很好地使用以下命令
^{pr2}$但是看看代码,似乎代码可以接受参数“infile”的多个文件名。我尝试了下面传递多个文件名,但没有一个有效。在
python prod2dev.py mysrv results D:\Automations D:\MyProduction "Automation_PP_CVM.xml, Automation_PT_CVM.xml"
python prod2dev.py mysrv results D:\Automations D:\MyProduction ["Automation_PP_CVM.xml", "Automation_PT_CVM.xml"]
python prod2dev.py mysrv results D:\Automations D:\MyProduction ['Automation_PP_CVM.xml', 'Automation_PT_CVM.xml']
python prod2dev.py mysrv results D:\Automations D:\MyProduction ['"Automation_PP_CVM.xml"', '"Automation_PT_CVM.xml"']
下面的代码显然正在遍历列表
infile = windowsSucksExpandWildcards(options.infile)
for filename in infile:
print(filename)
outfilename = os.path.join(options.outdir, os.path.split(filename)[1])
if os.path.exists(outfilename):
raise ValueError("output file exists: {}".format(outfilename))
with open(filename, "rb") as f:
root = lxml.etree.parse(f)
if not isEnabled(root):
print("Disabled. Skipping.")
continue
elif not hasEnabledTriggers(root):
print("Has no triggers")
continue
...
...
...
def windowsSucksExpandWildcards(infile):
result = []
for f in infile:
tmp = glob.glob(f)
if bool(tmp):
result.extend(tmp)
else:
result.append(f)
return result
请指导如何将多个文件名(字符串)传递给一个参数“infile”,它显然是一个列表。在
我运行的是python3.5.1 | Anaconda 4.0.0(32位)
从你发布的代码来看,你的代码看起来很可靠。在
问题是你发布的应该遍历列表的片段。程序的设置方式不能使用
infile
作为变量要修复它,只需使用
options.infile
切换infile
具体来说:
这是因为所有参数都存储在options“Namespace”类型变量中
传递
nargs
参数,而不是action="append"
:*
表示零或更多,就像在正则表达式中一样。 如果需要至少一个,也可以使用+
。因为您有一个默认值,所以我假设用户不需要传递任何。在相关问题 更多 >
编程相关推荐