我有这个输入: python script.py --key'(“music”,“aaa”)' - date'(“01/01/1990”,0,0)'
我做了:
constrain = literal_eval(sys.argv[2])
print(type(constrain))
print(type(sys.argv[4]))
所有输出都是str,而它们应该是元组。输入无法更改!
答案 0 :(得分:3)
你的命令行应该可以从MSYS或Linux中完美运行,但是你在这里从windows shell运行它。
Windows shell不会将简单引号视为合法的。它们直接传递给你的python代码。最重要的是,双引号被删除,这使得你的第二个arg '(music,aaa)'
传递给python:你无法literal_eval
那样。所以你的输入字符串有要改变(或你的操作系统:))
这样做可以调用您的代码:
python script.py --key "(""music"",""aaa"")" --date "(""01/01/1990"",0,0)"
你必须引用参数并在参数中加倍引号。并且只使用双引号。
编辑:甚至更好(适用于Linux和Windows):在参数中使用简单的引号,在外面使用双引号(literal_eval
不是json
:它理解简单和双引号!):
python script.py --key "('music','aaa')" --date "('01/01/1990',0,0)"
现在我得到了:
<type 'tuple'>
<type 'str'>
(你得到str
,因为第四个参数总是一个字符串,你可能忘记了literal_eval
它
和print(constrain)
产生:
('music', 'aaa')
(所以这不是python问题,而是CMD问题)