2014-10-18 119 views
1

如果我有命令:獲取殼輸入的字符串,而不是列出

$ /file.py item 2 

sys.argv會給我:

['/file.py', 'item 2'] 

有沒有一種方法來獲取輸入精確的文本,無需做' '.join(sys.argv)

+4

不是我所知道的。這看起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 你能解釋一下你爲什麼需要這個嗎? – jonrsharpe 2014-10-18 19:41:06

+2

...','.join(sys.argv)'給你一個不正確的結果 - 考慮'./yourprog foo bar'和'./yourprog「foo bar」'。 – 2014-10-18 19:45:10

+2

...如果你需要,你需要使用'pipes.quote(sys.argv)'或者'shlex.quote(sys.argv)'(取決於你的目標平臺是Python 2.x或Python 3)。 – 2014-10-18 19:45:48

回答

4

確切的最終用戶輸入決不會從shell傳遞到正在運行的程序。彙編參數向量由shell執行,並且該向量 - 而不是從其構建的字符串 - 作爲參數傳遞給execve系統調用。

事實上,可能根本就不存在shell命令 - 請考慮以subprocess.call(['/file.py', 'item 2'], shell=False)或其他語言中的等價物調用腳本的情況。

沒有修改你的shell來做一些特殊的事情(比如將最後的命令導出到一個環境變量 - 一個可以用DEBUG陷阱很容易實現的東西),沒有任何可能的方法來檢索它。

相關問題