2013-10-15 89 views
0

有沒有辦法像Python腳本一樣打開文本編輯器如vim或gedit,然後將文本編輯器中的輸入文本直接重定向回python腳本,以便將其保存到數據庫中? 類似git commit命令,它打開外部文本編輯器並退出時保存提交消息但不保存到文件中。將文本從編輯器直接重定向到python腳本

+1

那麼,你可以做什麼混帳確實:創建一個臨時文件,用vim編輯它,等待Vim退出並解析文件。 – romainl

+0

我想避免創建[臨時文件](http://stackoverflow.com/questions/13168083/)。但如果沒有其他方式,然後... – johnnyq

回答

1

我認爲你最終會過度依賴$ EDITOR特定的行爲而不使用臨時文件。 tempfile模塊處理tempdir和tempfilename的選擇,所以你不必這樣做。嘗試以下操作。

manedit.py:

 
    import os 
    import tempfile 
    import subprocess 

    data = '6 30 210 2310 30030' 

    mefile = tempfile.NamedTemporaryFile(delete=False) 
    # delete=False otherwise delete on close() 
    mefile.write(data) 
    mefile.close() 

    subprocess.call([ os.environ.get('EDITOR','') or 'vim', mefile.name ]) 
    # unset EDITOR or EDITOR='' -> default = vim 
    # block here 

    mefile = open(mefile.name, 'r') 
    newdata = mefile.read() 
    mefile.close() 
    os.remove(mefile.name) 

    print(newdata) 

然後再試試下面的命令來驗證每個場景。 與從$ EDITOR不同的編輯器替換版

 
    python manedit.py 

    env EDITOR= python manedit.py 

    env EDITOR=ed python manedit.py 

    env -u EDITOR python manedit.py 

的缺陷:只在編輯器中運行 的腳本塊。編輯可能會在現有編輯器會話中打開一個新窗口並返回,表示手動編輯會話已完成。但是我不知道這樣的編輯。

編輯: 如果你是專門在vim感興趣,或者您希望看到這樣的事情是如何具體得到,看到以下內容:
http://vimdoc.sourceforge.net/htmldoc/remote.html
http://petro.tanrei.ca/2010/8/working-with-vim-and-ipython.html
http://www.freehackers.org/VimIntegration

+0

它應該工作,並感謝更多的信息。 – johnnyq

相關問題