如何在python中获取没有名称的参数

Posted

技术标签:

【中文标题】如何在python中获取没有名称的参数【英文标题】:How do get parameter without name in python 【发布时间】:2014-05-15 17:14:00 【问题描述】:

我正在尝试编写一个接受可选输入参数和输入文件的 python 脚本:

./script --lines 1 file.txt

应该以1 为行数(--lines),然后以file.txt 作为输入文件。但是,getopt 甚至看不到“file.txt”,因为它前面没有参数名称。

如何获取文件名?我已经考虑过使用sys.arv[-1],但这意味着当我运行时:

./script --lines 1

然后1 将作为输入文件名。然后我的脚本会抛出一个错误(如果不存在名为 1 的文件):

error: file '1' no found

这可行,但不是一个很好的解决方案。有没有办法解决这个问题?

【问题讨论】:

使用argparse 模块... 一种可能的解决方法是检查 sys.argv[-1] 是否为有效文件。 【参考方案1】:

一定要使用argparse——它包含在python2.7+中,可以很容易地为旧版本安装:

parser = argparse.ArgumentParser()
parser.add_argument('--lines', type=int, default=0, help='number of lines')
parser.add_argument('file', help='name of file')
namespace = parser.parse_args()
print namespace.lines
print namespace.file

【讨论】:

用 ArgumentParser 替换 getopt 将我的代码大小减少了几十行。这是要走的路。 @pap42 -- 听到这让我非常高兴。我想这就是python团队从getopt -> optparser -> argparse...【参考方案2】:

打电话给getopts:

opts, args = getopts(...)

第二个元素是getopts 无法识别的参数列表。在您的示例中,它将是一个包含单个项目“file.txt”的列表。

【讨论】:

正是我需要的。谢谢。

以上是关于如何在python中获取没有名称的参数的主要内容,如果未能解决你的问题,请参考以下文章

在 C++11 中,如何获取没有名称的临时左值?

如何在 Python 中获取网络接口卡名称?

在 Python 中,如何定义一个函数包装器来验证具有特定名称的参数?

如何在python中获取名称的进程ID

Java如何获取方法参数中的名称

如何在 Visual Studio Code 中自动获取参数名称?