2009-12-06 32 views
5

this question的答案沒有成爲問題的核心。在基於CLI的Python程序中,我希望用戶能夠編輯文件,然後返回到程序。在返回之前,我希望他們能夠取消他們的編輯。這應該像Subversion中的commit-note-editing功能。智能地從Python CLI程序內啓動默認編輯器?

這種類型的任務目前的最佳做法是什麼?

+0

你想讓用戶隨時編輯一個插件(或整個程序!),然後讓他們放棄他們的編輯或「提交」他們,同時重新加載新的程序。這是你想要達到的目標嗎? – badp 2009-12-06 23:00:03

回答

2

Subversion等使用$ EDITOR環境變量來確定使用哪個程序來編輯文本文件。當然,如果你在一個shell的unixy平臺上,$ EDITOR只能工作。您必須爲Windows(cmd /c start tempfile.txt)或Mac OS X(open tempfile.txt)做一些不同的事情。

但是,這基本上是你的其他問題的答案和相關答案所說的。

如果您只是希望能夠「取消」編輯,請創建該文件的臨時副本,然後調用您的編輯器。您的程序可以將臨時文件的內容複製到真實文件中,或者,如果用戶取消,則不要。這基本上是Subversion如何做到的。

10

您可以嘗試查看Mercurial的源代碼,它是用Python編寫的。

他們使用os.environ來讀取環境變量HGEDITOR,VISUALEDITOR的值,默認爲vi。然後他們使用os.system在用tempfile.mkstemp創建的臨時文件上啓動編輯器。編輯完成後,他們讀取文件。如果它有任何真實的內容,操作繼續,否則,它被中止。

如果你想看看Mercurial是如何做的,詳細信息在ui.pyutil.py