2015-07-11 19 views
0

我有Python模塊/腳本(取決於您閱讀的內容)我想打開一個文件並將內容解壓到某個目錄,它工作正常例如使用file=sys.argv[1]folder=sys.argv[2],但我想使用argparse以方便最終用戶使用。如何使用argparse輕鬆存儲文件和文件夾位置,然後使用這些值

if len(sys.argv) < 2: 
    print "Usage: '%s -h'" % sys.argv[0] 
    sys.exit(0) 

def untar(): 
    #Both these values to come from argparse 
    tarloc = tfile 
    dest = folder 

    #tarloc = sys.argv[1] 
    #dest = sys.argv[2] 
    filecount = 0 
    tar = tarfile.open(tarloc) 
    ....etc 

if __name__ == "__main__": 
    parser = argparse.ArgumentParser(description='Module to untar TAR files') 
    parser.add_argument('-f', "--file", help='File to open', action="store_true", dest="tfile") 
    parser.add_argument('-d', "--dest", help='Destination to extract to', action="store_true", dest="folder") 
    args = parser.parse_args() 
    print args 

可能有人請幫助我告訴你如何得到argparse存儲指定參數和,那麼你如何使用它們。

還應該​​高於還是低於if __name__ ==部分?

回答

3

您的文件和目標參數都是必需的;如果用戶沒有指定他們,你的腳本將無所事事。

所以不要使用---選擇這裏,你想位置參數:

parser = argparse.ArgumentParser(description='Module to untar TAR files') 
parser.add_argument('file', help='File to open') 
parser.add_argument('folder', help='Destination to extract to') 
args = parser.parse_args() 

注意,我刪除了action論點; store_true用於布爾標誌選項;例如如果用戶在命令行中指定標誌,則會打開某些內容,不會收到參數。

接下來,通過這些filefolder值的函數:

def untar(tarloc, folder): 
    filecount = 0 
    tar = tarfile.open(tarloc) 
    # ....etc 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(description='Module to untar TAR files') 
    parser.add_argument('file', help='File to open') 
    parser.add_argument('folder', help='Destination to extract to') 
    args = parser.parse_args() 
    untar(args.file, args.folder) 

您可能想跟隨包含更多細節Python文檔中argparse tutorial

+0

乾杯,做了這項工作。我見過的教程,像你這樣的例子將有利於該頁面... – Exception

+0

https://docs.python.org/2/howto/argparse.html是'官方'教程。 – hpaulj

相關問題