为什么我们需要在 python 中使用 'argparse' 来与命令提示符进行交互?

Why do we need to use 'argparse' in python to interact with Command Prompt?

最近在python中发现了'argparse'库的使用。它用于获取输入和输出目录的位置。 使用 'argparse' 的需要是什么,为什么我们不能只使用 input() 来获取目录的位置或命令行中的任何用户输入?

我尝试在命令行中使用 input() 来获取用户输入,并且成功了。 我阅读了“python 中的标准输入和 sys.argv 之间的区别是什么?”的答案它并没有帮助解决我对何时使用 input() 以及何时使用 argparse 的疑问。

想象一个需要输入路径才能运行的程序。让我们看看如何使用 argparseinput.

首先,argparse

#! /usr/bin/env python3

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("inputfile")
args = parser.parse_args()
print(args.inputfile)

你可以这样使用它:

$ ./myscript.py /path/to/file.txt
/path/to/file.txt

如果我不是 100% 确定路径,我可以使用 shell 的 tab-completion 来帮助我

$ ./myscript.py /path/<TAB>
(selects the "to" directory)
$ ./myscript.py /path/to/<TAB>
(selects the "file.txt" file)
$ ./myscript.py /path/to/file.txt
/path/to/file.txt

很有帮助!!如果我想再次执行此操作,只需按“向上”箭头即可,它就在我的命令提示符处再次执行!


现在,让我们看看使用 input

#! /usr/bin/env python3

inputfile = input("Inputfile? ")
print(inputfile)

你可能会这样使用它

$ ./myscript.py
Inputfile? /path/to/file.txt

如果我不知道路径怎么办?我可以使用制表符补全吗?

$ ./myscript.py
Inputfile? /path/<TAB>

哦不!它只是在文件名中插入了一个制表符 - 我没有得到任何帮助。

如果我想再次执行相同的命令怎么办?我按上去,然后得re-type之前的文件路径运行ning。想象一下,您正在调试这个脚本并且需要一遍又一遍地 运行 - re-typing 路径会变旧 非常 很快。


input 实际上仅在您想要强制脚本交互时才有用,例如如果您想说“您确定要继续吗?[y/N]”。否则,最好在命令行上接受 运行time 参数,以充分利用 shell 所提供的功能,并使 re-execution(并在另一个脚本)就简单多了。