python sys.argv 区分整数和字符串
简单来说,我该如何在test.py中区分这两者:
python test.py 1
python test.py '1'
使用其他方法也可以。
编辑:
- 这个替代方法看起来不错,但有点复杂:argparse
- 让调用者稍后指定参数,在Python代码中使用
arg = input('请输入一个整数或字符串')
- 还有其他在这个问题的回答中提到的替代方法。
感谢大家的回复。大家都很棒!
6 个回答
3
在使用命令行时,处理参数是很常见的事情。像 "
和 '
这样的符号会被忽略,因为你可以用它们把几个词当作一个参数来传递。
这就意味着在Python中,你不能区分 '1'
和 1
这两个东西。
4
引号在命令行中会被系统处理掉。如果你想把它们传递给Python程序,你需要这样运行:python test.py 1 "'2'" "'3'" 4
2
命令行不支持传递不同类型的参数。如果你想要使用带有不同类型参数的命令,你就需要自己写一个命令行工具,或者至少得写一个命令解析器。
方案一:
用法:python test.py "1 2 '3' '4'"
实现:
command = sys.argv[1]
arguments = map(ast.literal_eval, command.split())
print arguments
方案二:
用法:
python test.py
1 2 '3' 4'
5 6 '7' 8'
实现:
for line in sys.stdin:
arguments = map(ast.literal_eval, line.split())
print arguments
(当然,你可能会想用 raw_input
来读取命令行输入,如果有 readline
的话也可以用,这只是一个例子。)
更好的解决办法是,实际上知道你需要什么类型的参数,并按这种方式解析它们,最好是使用像 argparse
这样的模块。