2017-08-14 9 views
0

argparseを使用してコマンドラインから関数を呼び出すときに問題が発生しました。スクリプトで定義されている関数の1つを実行したいだけです。argparseで関数を呼び出す問題

import os 
import shutil 
import getpass 
import argparse 


user = getpass.getuser() 
copyfolders = ['Favorites'] 

parser = argparse.ArgumentParser() 
parser.add_argument('e', action='store') 
parser.add_argument('i', action='store') 
args = parser.parse_args() 


def exp(args): 
    for folder in copyfolders: 
     c_path = os.path.join("C:", "/", "Users", user, folder) 
     l_path = os.path.join("L:", "/", "backup", folder) 
     shutil.copytree(c_path, l_path) 

def imp(args): 
    for folder in copyfolders: 
     l_path = os.path.join("L:", "/", "backup", folder) 
     c_path = os.path.join("C:", "/", "Users", user, folder) 
     shutil.copytree(l_path, c_path) 

私は私が手に引数を指定して、それを呼び出すようにしようとすると:

エラーフォロー引数が必要です。どんなに渡される引数は何私

+2

スクリプトを実行するコマンドラインからどのようなコマンドを使用していますか?スクリプト内で、 'exp()'または 'imp()'のいずれかの関数がどこに呼び出されていますか(それは定義されているようです)? – gobrewers14

+0

2つの引数を試しましたか? 'python script.py arg1 arg2' – user3080953

答えて

1

ここでの問題のカップル:

  1. あなたは直接定義された関数を呼び出すためにactionを使用することはできません。ただし、action='store_true'を使用してブール変数値に設定し、その変数が真(または偽)のときの処理を論理を定義することができます。
  2. スクリプト内の関数have to be defined before you call them

これは私のために働いてしまったものです:

また
def exp(arg): 
    #replace below with your logic 
    print("in exp for %s" % arg) 

def imp(arg): 
    #replace below with your logic 
    print("in imp for %s" % arg) 

user = getpass.getuser() 
copyfolders = ['Favorites'] 

parser = argparse.ArgumentParser() 

#make sure to prefix the abbreviated argument name with - and the full name with -- 
parser.add_argument('-e', '--exp', action='store_true', required=False) 
parser.add_argument('-i', '--imp', action='store_true', required=False) 
args = parser.parse_args() 

isExp = args.exp 
isImp = args.imp 

if isExp: 
    exp("foo") 

if isImp: 
    imp("bar") 

---と略さ引数名とフルネームを接頭辞にしてください。

関連する問題