我正在为我的脚本编写一个小的命令行实用程序,但是我不知道如何从参数中正确获取完整路径。
这就是我的意思。
parser = ArgumentParser()
parser.add_argument("-src",
required = True, help="path to some folder")
args = parser.parse_args()
print(args.src)
如果用户通过完整路径,例如"/home/username/projectname/folder"
,一切都很好。
但是,如果用户从"projectname"
文件夹运行脚本并传递相对路径"./folder"
,则在解析参数而不是完整路径{时,我会得到完全相同的字符串"./folder"
{1}}。
所以,我一直想知道"/home/username/projectname/folder"
中是否有某种内置功能可以从相对路径中获取完整路径?
答案 0 :(得分:5)
编辑:Alex's answer显示了如何通过简单地填充argparse
的{{1}来使add_argument
管理相对路径到绝对路径的转换}参数。
我认为argparse不提供这种功能,但是您可以使用os.path.abspath来实现:
type
请记住,这将通过将工作目录与相对路径连接起来而形成绝对路径。因此,该路径被认为是相对于工作目录的。
如果要创建相对于脚本目录的路径,则可以在abs_src = os.path.abspath(args.src)
变量上使用os.path.dirname,并使用os.path.join从相对于Python的路径构建绝对路径。脚本:
__file__
最后,由于联接的路径可以包含诸如script_dir = os.path.dirname(__file__)
abs_src = os.path.join(script_dir, args.src)
和.
之类的标记,因此您可以使用os.path.normpath“修饰”构建的路径:
..
答案 1 :(得分:1)
要添加到Tryph的答案中,可以在参数声明中指定type
参数。它可以接受带有单个字符串参数并返回转换后值的任何可调用项:
parser.add_argument("-src",
required=True,
help="path to some folder",
type=os.path.abspath)
这将返回带有绝对路径的字符串,您也可以指定自己的函数:
def my_full_path(string):
script_dir = os.path.dirname(__file__)
return os.path.normpath(os.path.join(script_dir, string))
parser = ArgumentParser()
parser.add_argument("-src",
required=True,
help="path to some folder",
type=my_full_path)