2010-07-25 43 views
2

我有一個應用程序(CLI),其中包括編輯帳戶信息的功能。它通過詢問一個問題並在答案中加入舊的價值來做到這一點,以便它是可編輯的。目前,我正在使用readline模塊來執行此操作。我想用另一種方法來做同樣的事情,避免使用這個模塊(我想讓應用程序可以運行在 Windows上的所有功能以及運行python的任何操作系統上的GNU/Linux )。在Python中插入文本到raw_input(以避免readine)的跨平臺方法

我最初發現下面的代碼(我修改它有點適應一個功能)在下面的網站,但由於該線程是4歲我想我在這裏問。 http://bytes.com/topic/python/answers/471407-default-editable-string-raw_input

import readline 
def editInput(question, old_value): 
    readline.set_startup_hook(lambda: readline.insert_text(old_value)) 
    try: 
     new_value = raw_input(question) 
    finally: 
     readline.set_startup_hook(None) 
    return new_value 

editInput('What\'s the answer? ', '32') 

更新:我不一定需要readline的替代(如PyReadline)。我只需要相同的結果。我更新了這個問題,提到我不一定需要它在Windows和GNU/Linux上運行,但是在任何由python支持的操作系統上。所以基本上,只使用最基本的功能(如sys.stdin,等等)

回答

1

行編輯功能遠不是微不足道的重複。例如,只是一種功能,例如「讀取下一個按鍵而不回顯」(即使在開始解釋該按鍵的含義以重新定位光標並改變屏幕外觀以及文本行的記憶內容之前正在編輯)不能在跨平臺的方式做簡單:你需要在Windows msvcrt功能,並在Unix-Y系統curses功能 - 與您的需求,它的工作原理上被Python支持的任何 OS織機巨大,而且不可能滿足。

您需要界定非常嚴格的設定操作系統/其所必須運行平臺,和在線編輯功能,它必須提供絕對的子集,前一個答案可以考慮。如果你無法劃定這些集合,那麼答案很簡單:你所要求的是,過於籠統,根本不可能。

+0

感謝您的幫助。我想我必須看看編輯賬戶的不同方式,或者只是爲不提供readline的操作系統進行更改。 – avacariu 2010-07-25 04:25:19

0

爲什麼不使用PyReadline?它被IPython用於或多或少相同的功能,並且得到了它們的很好的支持。

其實,從頭開始。我剛剛嘗試過,它不起作用。很可能,pyreadline不支持set_startup_hook

+0

我不一定需要readline函數。我需要他們提供的相同結果。我會更新這個問題。 – avacariu 2010-07-25 01:44:23

+0

考慮到你的問題的更新,我可以告訴你,沒有解決方案只使用Python標準庫來實現你想要的。所以支持所有託管Python的操作系統是不可能的。 – 2010-07-25 02:54:36

+0

感謝您的幫助。我想我必須看看編輯賬戶的不同方式,或者只是爲不提供readline的操作系統進行更改。 – avacariu 2010-07-25 04:24:55