У меня есть пользовательская функция в скрипте python, который я вызываю через командную строку. В этой функции есть 3 требуемых параметра и 3 необязательных.Передача переменной числа обязательных и необязательных аргументов через командную строку
Так определение функции выглядит следующим образом:
def main(csv, inDir, batchID, mapprj=True, doP2D=True, rp=100):
Когда я вызываю функцию на CL I может или не может установить последние три входных переменных. Для того, чтобы вызвать эту функцию, используя эти входы, прямо сейчас у меня есть:
if __name__ == '__main__':
import sys
main(sys.argv[1], sys.argv[2], sys.argv[3])
Но сказать, что я хочу, чтобы установить тр = 50, то этот вызов пропускает этот аргумент. Однако, если я перейду к sys.argv [6], это не удастся, если я не укажу еще 3 необязательных аргумента.
Есть ли лучший способ, кроме следующего блока, предоставить эти аргументы основной функции?
if __name__ == '__main__':
import sys
if len(sys.argv) == 4: # i.e. 3 arguments are supplied
main(sys.argv[1], sys.argv[2], sys.argv[3])
if len(sys.argv) == 5: # i.e. 4 arguments are supplied
main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
if len(sys.argv) == 6: # i.e. 5 arguments are supplied
main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
if len(sys.argv) == 7: # i.e. 6 arguments are supplied
main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6])
ТАКЖЕ, если я называю сценарий (с, если заявления, как выше) из командной строки, как это:
python script.py 'csvFile.csv' 'path/to/directory' 'batchName' False False rp=50
, когда я «печать рп» в основной функции, это возвращение ' RP = 50' . Я думал, что установка rp = 100 в определении функции указала, что rp является необязательным аргументом, значение по умолчанию которого равно 100, а явное обращение к «rp = 50» должно переопределить значение по умолчанию и установить rp на 50, а не «rp = 50»,
Наконец, когда я называю сценарий вроде этого:
python script.py 'csvFile.csv' 'path/to/directory' 'batchName' rp=50
переменная mapprj становится установлено значение «гр = 50», doP2D является верной на значения по умолчанию, и гр остающеся значение по умолчанию из 100. Я думал, что вышеупомянутый вызов должен был сохранить mapprj и doP2D в качестве значений True по умолчанию и установить rp на 50, поскольку я явно установил его на 50.
Что я делаю неправильно?
Благодаря
, что вы ищете модуль под названием 'argparse' – Nullman