python sys.argv 区分整数和字符串

2 投票
6 回答
12665 浏览
提问于 2025-04-16 23:32

简单来说,我该如何在test.py中区分这两者:

python test.py 1
python test.py '1'

使用其他方法也可以。


编辑:

  1. 这个替代方法看起来不错,但有点复杂:argparse
  2. 让调用者稍后指定参数,在Python代码中使用 arg = input('请输入一个整数或字符串')
  3. 还有其他在这个问题的回答中提到的替代方法。

感谢大家的回复。大家都很棒!

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 这样的模块。

撰写回答