Как дать входной файл в качестве аргумента для чтения его в Python? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь дать входной файл в качестве аргумента в Python, используя argparse, но почему-то я получаю сообщение об ошибке.

Вот мой код:

from argparse import ArgumentParser

def main():
    args = arg_parser.parse_args()
    print('in main, args = ',args)
    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)
    main()

Я звонюскрипт со следующей командой из командной строки:

python updaterScript.py --input_file myCSVFile.csv

Что я здесь не так делаю?Почему я получаю ошибку?

Вот ошибка:

Traceback (most recent call last):
  File "/home/ProjectP/runtime/bin/updaterScript.py", line 11, in <module>
    load_entry_point('ProjectP==1.0', 'console_scripts', 'updaterScript.py')()
  File "/home/ProjectP/runtime/lib/python3.6/site-packages/ProjectP/updaterScript.py", line 10
0, in main
    args = arg_parser.parse_args()

NameError: имя 'arg_parser' не определено

Ответы [ 3 ]

0 голосов
/ 08 мая 2019

Ну, согласно вашему коду, нет логической причины, что он распознал бы arg_parse. Вы не импортируете его или не инициализируете его в любой точке вашего (видимого) кода. Я не понимаю, что вы пытаетесь сделать там. Откуда вы взяли arg_parse?

0 голосов
/ 08 мая 2019

Не нужно звонить parse_args() в двух местах.Вызовите его один раз, затем передайте результат в main() в качестве параметра.

def main(args):
    print('in main, args = ',args)
    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)
    main(args)

Нет никакой причины, по которой я вижу, чтобы разделить код между main() и блоком if.Я бы просто положил все это в одно место и переместил import в начало файла.

import argparse

def main():
    parser = argparse.ArgumentParser(description="less script")
    parser.add_argument('--input_file', required=True, help="input file containing IDs and attributes to change (csv)")
    args = parser.parse_args()
    print('args is: ',args)

    input_file = args.input_file
    update_file_input(input_file)

if __name__ == '__main__':
    main()
0 голосов
/ 08 мая 2019

Ну, ваши аргументы, которые на самом деле arg_parser.parse_args (), не определены.Вы импортируете или у вас есть откуда-то arg_parser?Можете ли вы отладить и посмотреть, что возвращает arg_parser.parse_args ()?

...