使用argpar发出调用函数

2024-04-23 17:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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)

当我试图用一个论点来称呼它时,我得到:

error the follow arguments are required: i

不管通过什么论证。你知道吗


Tags: pathimportaddparserosargparseargsaction
1条回答
网友
1楼 · 发布于 2024-04-23 17:31:23

这里有几个问题:

  1. 不能使用^{}直接调用已定义的函数。但是,您可以使用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")

另外,请确保在缩写参数名称前面加上-,在全名前面加上。你知道吗

相关问题 更多 >