У меня есть синтаксический анализатор xml, который изначально предназначался для использования с одним файлом, но был отредактирован для обработки всех файлов в заданном каталоге и подстановочного знака. Он запускается с сервера Linux. Команда может использоваться следующим образом:
-d, --directory каталог для чтения всех файлов по одному за раз; пример -d /output/*.xml
-f, --file xml для чтения; пример: -f вывод. xml
-o, --output Имя файла выходного файла для HTML отчета
Итак, в этом конкретном примере, пример того, что Я пытаюсь сделать было бы написано как
python parser.py -d / Directory / Directory -w вывод *. xml
Вот my main ()
def main():
if (output != ''):
if output.endswith('.html'):
outFile = open(output, 'w')
else:
outFile = open(output + '.html', 'w')
else:
outFile = open('nmap-SMB-scan-output.html', 'w')
if (inFile != ''):
if not os.path.isfile(inFile):
print('\nThere was an error opening file: %s (1)' % inFile)
sys.exit()
else:
try:
outFile = header(outFile)
outFile = processFile(inFile, outFile)
outFile = footer(outFile)
except:
print('\nThere was an error opening file: %s (2)' % inFile)
elif (directory != ''):
if (wildcard == ''):
print('\nExiting, if using directory must use wildcard as well.')
sys.exit()
findFiles = directory + '/' + wildcard
onlyfiles = glob.glob(findFiles)
outFile = header(outFile)
for f in onlyfiles:
try:
outFile = processFile(f, outFile)
except:
print('\nThere was an error opening file: %s (3)' % f)
outFile = footer(outFile)
else: # if (inFile = '') and (directory = ''):
print('\nYou must provide a file or directory to continue.')
sys.exit()
Затем файл вставляется в фактический аспект обработки, форматируется и выполняет команду try:
try:
opts, args = getopt.getopt(sys.argv[1:], "f:o:w:d:", ['file=', 'output=', 'wildcard=', 'directory='])
inFile = output = directory = wildcard = ''
proceed = False
for opt, val in opts:
if opt in ('-f', '--file'):
if not os.path.isfile(val):
print('\nFile "%s" does not appear to exist, please verify file name.' % val)
sys.exit()
else:
proceed = True
inFile = val
if opt in ('-o', '--output'):
output = val
if opt in ('-d', '--directory'):
if not os.path.isdir(val):
print('\nDir "%s" does not appear to exist, please verify directory name.' % val)
sys.exit()
else:
print("Directory selection:" + % val)
proceed = True
directory = val
if opt in ('-w', '--wildcard'):
wildcard = val
if (__name__ == '__main__') and proceed == True:
main()
else:
print('Need to provide a file or directory to process')
usage()
except getopt.error:
usage()
Я не совсем уверен, почему это так не возвращаясь к main (), чтобы перейти к следующему файлу ... любые предложения, которые вы можете предоставить, будут оценены.