简单地说,我如何在test.py中区分这两者:
python test.py 1
python test.py '1'
解决方法没问题。
arg = input('Please enter either an integer or a string')
谢谢大家的回复。每个人身体+1。
答案 0 :(得分:3)
shell引用了引号。如果你想让它们进入python,你必须调用python test.py 1 "'2'" "'3'" 4
答案 1 :(得分:2)
由shell执行的args的常见处理。 "
和'
会被忽略,因为您可以使用它们来传递少量单词作为一个参数。
这意味着您无法在Python中区分'1'
和1
。
答案 2 :(得分:2)
shell命令行不支持传递不同类型的参数。如果你想拥有不同类型参数的命令,你需要编写自己的命令行或者至少你自己的命令解析器。
变式1:
用法: python test.py "1 2 '3' '4'"
实现:
command = sys.argv[1]
arguments = map(ast.literal_eval, command.split())
print arguments
变体2:
用法:的
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
这样的模块。
答案 3 :(得分:2)
Windows专用:
# test.py
import win32api
print(win32api.GetCommandLine())
示例:
D:\>python3 test.py 3 "4"
C:\Python32\python3.EXE test.py 3 "4"
然后您可以自己解析命令行。
答案 4 :(得分:1)
正如您从实验中看到的那样,引用Python时引用已经消失了。您必须更改Python的调用方式。
答案 5 :(得分:0)
我不确定我是多么正确,但如果你只使用整数命令行参数,你可以将它强制转换为int。
假设(在* nix中),我运行我的程序:
./test.py 1
我可以在我的程序中说出一些内容
import sys
def main():
a=int(sys.argv[1])