2017-06-30 22 views
1

我有一個名爲mymodule.py的腳本,它使用了argparse。我希望能夠編寫一個腳本fakemicro.py,它將能夠從mymodule.py導入主模塊並將參數傳遞給它。 我的代碼是根據各地Brian的答案在這裏:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/這裏接受的答案:In Python, can I call the main() of an imported module?導入python模塊,同時傳遞argparse列表

我不斷收到意想不到的錯誤,所以我希望你能有所幫助。

這裏是mymodule.py內容:

#!/usr/bin/env python 
import argparse 
import sys 
def parse_args(args): 
    parser = argparse.ArgumentParser(
     description='yeah' 
    ) 
    parser.add_argument(
     '-i', nargs='+', 
     help='full path of input directory', required=True 
    ) 
    parser.add_argument(
     '-o', '-output', 
     help='full path of output directory', required=True 
    ) 
    parsed_args = parser.parse_args() 
    return parsed_args 


def main(args): 
    args = parse_args(args) 
    print args.i 
    print args.o 
if __name__ == '__main__': 
    main(sys.argv[1:]) 

這裏是fakemicro.py

#!/usr/bin/env python 

import mymodule 
import sys 
mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]]) 

我期待的是,如果我輸入了這會起作用: mymodule.py -i path/to/1 -o path/to/2在命令行 但而是我的劇本爆發了。

$ fakemicro.py path/to/2 path/to/3 
usage: fakemicro.py [-h] -i I [I ...] -o O 
fakemicro.py: error: argument -i is required 

我認爲mymodule.py會看到,我通過 mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]]) 通過-i arg1 -o arg2

這裏是什麼mymodule.py輸出看起來在以其自身在命令行中運行,如:

$ mymodule.py -i 1 -o 2 
['1'] 
2 

任何幫助將非常感激。謝謝!

+0

'mymodule'不能自行運行,是嗎?你沒有使用'args'參數。 – hpaulj

+0

很抱歉,我沒有導入sys。我添加了args = parse_args(args),現在mymodule.py在按原樣運行時返回期望值。我會編輯我原來的帖子來反映這一點。 –

回答

0

我想通了。 我沒有將args的參數傳遞給parsed_args = parser.parse_args()。因此,解析器對象使用的是sys.argv[1:]作爲源,而不是作爲參數傳遞的任何東西。 將該行更改爲​​解決了該問題。