2016-12-22 3 views
-1

Студент-новичок Python здесь (работает 2,7) пытается выяснить мое понимание функций и argparse ... иногда вместе.Как вернуть значение main из функции, вызванной функцией argparse

У меня есть основная функция, которая вызывает функцию argparse, которая имеет аргумент командной строки argparse (-i/- input), который вызывает функцию path_check, которая проверяет путь, переданный во входном аргументе. Теперь я не могу возвратить проверенный путь ввода к моей основной функции, так как функция path_check не вызывается в основном. Также интересно, есть ли лучший способ структурировать это (не уверен, что класс здесь подходит).

#!/bin/user/python 

import os,sys 
import argparse 

def parse_args(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("-i", "--input",help="source directory", 
     required=True,type=path_check) 
    args = parser.parse_args() 

def path_check(arg): 
    if not os.path.exists(arg): 
     print("Directory does not exist. Please provide a valid path") 
    else: 
     return arg 

def main(): 
    ''' 
    This main script analyzes the source folder and redirects 
    files to the appropriate parsing module 
    ''' 
    parse_args() 
    source = path_check() # This is the problem area 

if __name__ == "__main__": main() 

получил Ошибка

TypeError: path_check() takes exactly 1 argument (0 given) 

EDIT: Вот исправленный код, если это полезно для всех. Мне нужно было добавить описание аргумента argparse, чтобы у меня было средство вызвать значение аргумента, которое я мог бы вернуть.

#!/bin/user/python 

import os,sys 
import argparse 

def parse_args(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("-i", "--input",help="source directory", 
     dest="input",required=True,type=path_check) 

    args = parser.parse_args() 
    return args.input 

def path_check(arg): 
    if not os.path.exists(arg): 
     print("Directory does not exist. Please provide a valid path") 
    else: 
     return arg 

def main(): 
    ''' 
    This main script analyzes the source folder and redirects 
    files to the appropriate parsing module 
    ''' 
    source = parse_args() 

if __name__ == "__main__": main() 
+3

И что вы не понимаете? Вы определили его, чтобы принять аргумент, но не передавайте его, когда вы его вызываете. – jonrsharpe

ответ

2
def parse_args(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("-i", "--input",help="source directory", 
     required=True,type=path_check) 
    args = parser.parse_args() 
    return args  # <==== 

def main(): 
    ''' 
    This main script analyzes the source folder and redirects 
    files to the appropriate parsing module 
    ''' 
    args = parse_args()  # <=== 
    source = path_check(args.input) # <=== 

parse_args функция должна возвращать переменную args в main. А затем main должен передать свой input атрибут path_check.

args.input будет строка, указанная в командной строке.

args - это простой объект argparse.Namespace с атрибутами, соответствующими каждому из аргументов, которые вы определили в parser. Некоторые из этих атрибутов могут иметь значение None, в зависимости от того, как обрабатываются значения по умолчанию.

Во время отладки это хорошая идея, чтобы включать в себя

print(args) 

заявления, так что вы видите, что вы получите обратно от парсера.

0

Для уточнения вышеизложенное комментарий, вам необходимо включить аргумент здесь

source = path_check(argument) 
0

При вызове функции в основном, если вы хотите передать некоторую переменную, которую необходимо вставить их в скобках.

function(Variable1, Variable2,) 

и не забудьте поставить их на функцию, чтобы принять переменную. Чтобы вернуть переменную в вашу основную функцию, просто в конце функции выполните return VariableName, а также добавьте ее перед вызовом в main, за которым следует знак =.

пример:

main() 
    x = 1 
    ReturnVariable = function1(x) 

function1(x) 
    ReturnVariable = x * 2 
    return ReturnVariable 
Смежные вопросы