Вывести любую ошибку из скрипта в файл - stderr - PullRequest
0 голосов
/ 29 октября 2018

У меня есть программа на python, которая принимает три аргумента командной строки -f (файл1) -n (файл2) -o (файл3).

Программа структурирована следующим образом:

ffile=''
nfile=''
ofile=''

try:
   myopts, args = getopt.getopt(sys.argv[1:],"f:n:o:h:")
   for x,y in myopts:
       if x == '-f':
          ffile=y
       elif x == '-n':
          nfile=y
       elif x == '-o':
          ofile=y

   <do something here with the files>
except:
       sys.stderr("err.txt",w)
       sys.exit(2)

Я пытаюсь сделать следующее:

  1. Если какой-либо из аргументов (-f, -n) отсутствует, выведите соответствующую ошибку.
    1. Распечатать сообщение об ошибке - что бы это ни было - в файл "err.txt".

Однако файл err.txt пуст. Я не уверен, что происходит. Я видел много вопросов, где stderr записывается в файл, но, похоже, он не отвечает на мой вопрос.

1 Ответ

0 голосов
/ 29 октября 2018

Если вы готовы изменить свой подход, я бы порекомендовал не пытаться заново изобретать колесо, а проверить некоторые из существующих библиотек python для реализации этой функциональности.

Существует библиотека с именем argparse , которая хорошо разбирает аргументы командной строки и возвращает соответствующие сообщения об ошибках, возможно, вы найдете ее полезной.

import argparse
p = argparse.ArgumentParser(description='My Program', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
p.add_argument("-f", type=str, help="-f file", required=True)
p.add_argument("-n", type=str, help="-n file", required=True)
p.add_argument("-o", type=str, help="-o file", default=None)

args = p.parse_args() # will throw error if required -f and -n args not passed

С точки зрения регистрации ошибок, вы можете попробовать использовать библиотеку python logging . Эту библиотеку можно настроить для записи информации в стандартный вывод, текстовые файлы и т. Д., И, вероятно, она достаточно гибкая для ваших требований.

...