argparse:“sys.argv[1]”和“args.input”有啥区别?
Posted
技术标签:
【中文标题】argparse:“sys.argv[1]”和“args.input”有啥区别?【英文标题】:Argparse: what is the difference between "sys.argv[1]" and "args.input"?argparse:“sys.argv[1]”和“args.input”有什么区别? 【发布时间】:2018-06-24 23:32:42 【问题描述】:我正在学习如何使用 argparse,这对我来说是一个迷宫。
我有一个有效的代码:如果我运行 python Test.py .
,它会使用此代码打印层次结构中的所有文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import argparse
import sys
import glob
#parser = argparse.ArgumentParser()
#parser.add_argument('-input', dest='input',help="input one or more files",nargs='+',metavar=None
#args = parser.parse_args()
def dirlist(path, c = 1):
for i in glob.glob(os.path.join(path, "*")):
if os.path.isfile(i):
filepath, filename = os.path.split(i)
print ('----' *c + filename)
elif os.path.isdir(i):
dirname = os.path.basename(i)
print ('----' *c + dirname)
c+=1
dirlist(i,c)
c-=1
#path = os.path.normpath(args.input)
path = os.path.normpath(sys.argv[1])
print(os.path.basename(path))
dirlist(path)
但是,由于我想了解 argparse 的工作原理,我想使用 python Test.py - input .
运行代码
但没有任何效果。
我知道我很接近了,我已经写了一种科学怪人的代码,它被注释了。
我哪里错了?我觉得我离解决方案很近了......
【问题讨论】:
请将文本作为文本发布,而不是截图 我不知道这条评论是否对你有帮助,但如果你想了解 argparse 是如何工作的,你可以随时look at source code。args.input
将是一个列表,因为nargs='+'
而sys.argv[1]
将是一个字符串,我相信。
@FrancescoMantovani 如果可以,我会的。
我不知道为什么有人会发布一段纯文本作为截图。如果您的计算机上有一段文本,则将其作为文本粘贴到您的问题中(必要时在 <pre>
块中)应该比截屏更省力。如果您的程序输出对您的问题很重要(我认为这是因为您已经包含了它),为什么要防止(例如)本网站上的盲人能够阅读它?
【参考方案1】:
感谢@match 提供正确的提示。
问题是我在 argparse 定义中使用了nargs='+'
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import argparse
import sys
import glob
parser = argparse.ArgumentParser()
parser.add_argument('-input', dest='input',help="input one or more files",metavar=None)
args = parser.parse_args()
def dirlist(path, c = 1):
for i in glob.glob(os.path.join(path, "*")):
if os.path.isfile(i):
filepath, filename = os.path.split(i)
print ('----' *c + filename)
elif os.path.isdir(i):
dirname = os.path.basename(i)
print ('----' *c + dirname)
c+=1
dirlist(i,c)
c-=1
path = os.path.normpath(args.input)
print(os.path.basename(path))
dirlist(path)
代码现在可以工作了!
【讨论】:
以上是关于argparse:“sys.argv[1]”和“args.input”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章