我正在做一个命令行应用程序,并且想通过带参数的命令支持用户输入。 我所有的Google搜索都指向argparse库,但这似乎仅解析参数(-h,-m,-i ...),而不是命令(cd,rm ...)。 我想要Windows命令提示符(命令...)之类的东西。
我已经尝试过argparse库。我可以指定参数,然后解析正常。
我还考虑过创建一个不需要值的参数并将其视为命令。 例如:-c --name'Bob'--age 37 Argparse说“ -c”是一个参数,但我会将其用作命令。其余参数将被解析为常规参数。 但这似乎很棘手,而且过于复杂。
另一个选择是自己解析第一个单词(命令),然后使用argparse解析其余单词(参数)。 但是,这又太复杂了。
对于任何语言错误,我深表歉意-英语不是我的母语。
谢谢。
编辑:对不起,我没有弄清楚用户何时以及如何输入命令。用户将打开该应用程序并键入命令。 感谢@CharlesDuffy指出这一点。
编辑2:劣质者是我问题的答案。 感谢该链接@ GZ0。
它如何工作:
我用input()
接受用户输入,然后使用shlex
模块(由@Amit提及)将字符串分成一个列表。然后,该列表将被馈送到parser.parse_args()
中的argparse
方法。
如果有人对代码感兴趣,请访问the link。
答案 0 :(得分:0)
您正在寻找的是子流程模块(https://docs.python.org/3/library/subprocess.html)。例如,如果必须运行bash命令“ ls -l”,则将按照文档进行以下操作。
import subprocess
subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
文档还指出,“ shlex.split()在为args确定正确的标记化时非常有用,尤其是在复杂情况下”
import shlex, subprocess
command_line = input()
## /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
args = shlex.split(command_line)
print(args)
## ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
p = subprocess.Popen(args) # Success!
我强烈建议您尽可能多地阅读文档,并搜索教程。请让我知道这是否是您想要的。
答案 1 :(得分:0)
听起来sys
模块可以满足您对简单参数解析的需求。
示例:
myscript.py
import sys
print(sys.argv)
$ python myscript.py ls and other args
['myscript.py', 'ls', 'and', 'other', 'args']
sys.argv
包含传递给python
命令的所有参数。在这里,您可以根据需要使用它们。