2011-06-27 13 views
1

我一直在使用argparse模塊接受程序的輸入,並取得了很大的成功。我定義了大約六個可選參數(需要用 - 前綴的參數 - 可以放在列表中的任何位置)和一個位置參數(使用放置的順序來確定參數的必需參數),所以我的用法圖看起來像這(與簡潔,刪除多餘的可選參數):如何在Pythonbrew中使用位置參數和空格?

usage: Main.py [-h] [--site SITE] [--username USERNAME] [--password PASSWORD] 
      [--verbose] 
      filepath 

爲了運行Debian的一個Python 2.7腳本(船舶與Python 2.6),我使用pythonbrew已經成功,它允許多個Python的安裝合作在同一臺服務器上存在。使用它的一個很好的副作用意味着我可以關閉腳本的可執行權限,這使得用戶管理更容易。

一切都很好,直到我試圖存儲到一個有空間的文件路徑(我唯一的位置參數),並且我發現我不能!

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/ 
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My\ Client/' 
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My\ Client/" 
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My\ Client/] 

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My Client/ 
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My Client/' 
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My Client/" 
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My Client/] 

都返回相同的錯誤消息

Main.py: error: unrecognized arguments: Client 

任何人都可以證實這個錯誤?事實上,沒有人在Python組中提到它,這讓我相信這是一個Pythonbrew錯誤,但我希望保持Pythonbrew並找到運行此腳本的備用方法。現在,我只是將文件存儲到一個沒有空格的文件夾中,但我希望有人能幫助解決這個錯誤。

+0

聽起來像'pythonbrew'中的一個錯誤,但不是一個巨大的錯誤。 –

+0

OH BLEEPS SAKE。我剛剛閱讀了'pythonbrew/commands/py.py'的源代碼,以及即時facepalm。 –

回答

2

的問題是pythonbrew/commands/py.py。每次調用subprocess.Popen()都需要進行修改,以便它使用命令列表而不是字符串。

+0

在使用[shlex.split](http://docs.python.org/library/shlex.html)從字符串命令中獲取所需列表之前,我已經取得了成功 –

+0

您可能會對該答案有所瞭解。當我結合我的例子(不知道爲什麼我沒有)並使用'pythonbrew py Main.py --verbose ['/ media/rackspace/db1/clients/My Client /']'時,它會正確傳遞。但是,有點諷刺的是,它通過內置括號的參數。所以,我的代碼失敗,沒有這樣的目錄:'[/ media/rackspace/db1/clients/My Client /]'**。是否有另一種方式來通過列表? –

+0

爲什麼你會這樣做而不是按照我的回答說的去做? –

1

我不能發表評論,因爲我太新了,但是您是否試圖通過在其前放置\來逃避空間?也許是這樣的:

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/

+0

如果引號不行,那麼反斜槓也不會。 –

+0

你的觀察正確無誤,我實際上使用了反斜槓,但在寫這個問題時,我輸入了正斜線。我編輯了這個問題。接得好! –

相關問題