Я новичок в Python и почти не знаю о списках и кортежах. У меня есть программа для выполнения, которая принимает несколько значений в качестве входных аргументов. Ниже приведен список входных аргументов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()
Программа прекрасно работает с помощью следующей команды
python prod2dev.py mysrv results D:\Automations D:\MyProduction Automation_PP_CVM.xml
Но глядя на код, похоже, код может принимать несколько имен файлов для аргумента «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», который, по-видимому список.
Я бегу на Python 3.5.1 | Anaconda 4.0.0 (32-разрядная версия)
И что лучший способ назвать программу? – Ali
@Ali: Как и ваша первая попытка, но без кавычек и без запятых. Кавычки используются для создания одного аргумента, который будет более одного. В этом случае они должны быть отдельными аргументами. Эти запятые интерпретируются как запятые, а не разделители. Пространство является разделителем. – zondo