2016-03-27 7 views
1

Я хотел бы запустить эту функцию из скрипта вместо командной строки. Например, эта функция:Как я могу вызвать функцию Python из сценария, который должен был запускаться в командной строке

def main(): 
    parser = argparse.ArgumentParser(description='Caffe prototxt to mxnet model parameter converter.\ 
        Note that only basic functions are implemented. You are welcomed to contribute to this file.') 
    parser.add_argument('caffe_prototxt', help='The prototxt file in Caffe format') 
    parser.add_argument('caffe_model', help='The binary model parameter file in Caffe format') 
    parser.add_argument('save_model_name', help='The name of the output model prefix') 
    args = parser.parse_args() 
    ... 

Как я могу запустить ее следующим образом?

file.main('file_1.csv', 'file_2.csv', 'name') 

И зачем кому-то писать функцию, которую я могу запустить только из командной строки? Это кажется неудобным.

+0

Эта функция написана, потому что обычно плохо писать код под 'if name == '__main __''. – wRAR

+0

Привет @wRAR, есть ли у вас какие-либо ссылки для меня, чтобы узнать, почему это так? Большое спасибо. – user2014905

+0

Это просто, вы не можете называть код, написанный под 'if name == '__main __'' так же легко, как код, написанный в отдельной функции, когда вам нужно позвонить ему из другого места. – wRAR

ответ

3

Вы можете использовать sys.argv:

import sys 

sys.argv.extend(['file_1.csv', 'file_2.csv', 'name']) 
file.main() 
0

Вы, вероятно, хотите, чтобы сделать немного света рефакторинга. Потяните argparse в свой собственный метод, который затем вызывает main(args), а затем создайте свой собственный argparse.Namespace(), который вы передадите в main с вашей конфигурацией.

И да, я согласен, что код будет лучше, если бы он был уже учтен таким образом. Но люди прагматично координируют свои потребности.