2017-01-14 86 views
-1

我有這樣的輸入: python script.py --key'(「music」,「aaa」)'--date'(「01/01/1990」,0,0)'Python3 does not detect tuple

而且我做的:

constrain = literal_eval(sys.argv[2]) 
print(type(constrain)) 
print(type(sys.argv[4])) 

而且所有輸出海峽,而他們應該是元組。輸入無法更改!

+0

如果你加你明白了什麼'打印(sys.argv中)'? – user2357112

+0

你用什麼* shell *來運行命令行?聽起來好像無論你用什麼來調用Python都不會解析出引號,所以Python被髮送'''(\「music \」,\「aaa \」)'「'。 –

+0

我只能得到(class'str') – Dani

回答

3

你的命令行應該可以從MSYS或Linux完美工作,但是在這裏你是從windows shell運行的。

Windows shell不會將簡單引號視爲syntatcic。它們直接傳遞給你的Python代碼。最重要的是,雙引號被刪除,這使得你的第二個參數'(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問題)

+0

Nop,不工作 – Dani

+0

在這裏完美工作。你能粘貼你的新命令行嗎? –

+0

這種方法的工作,但我不能改變輸入 – Dani