2012-08-10 75 views
0

我已經在python(使用cmd模塊)中編寫了一個shell,並且在使用此shell時,有關命令的某些信息運行ect。被輸出到文本文件。我想編寫一段代碼創建一個別名,以查看文本文件在我的bash shell(例如,我彷彿執行以下命令: alias latest.trc='less <path to file> 我目前最好的努力是:在退出python腳本時在bash中創建一個別名

x="alias %s = 'less %s'" % (<alias name>, <path>) 
y=shlex.split(x) 
atexit.register(subprocess.call, y) 

這工程退出,如執行某些命令,如果x =「回聲‘再見’」,但我得到的錯誤

OSError: [Errno 2] No such file or directory 

我進入的路徑肯定是有效的,如果我直接在命令行中運行X它的工作原理。

A ny可以幫助我爲什麼我的代碼遇到錯誤或更好的方式來實現相同的效果將不勝感激。

回答

1

由於aliasbash命令,而不是可執行文件,所以出現錯誤。因爲子產生一個新的進程,任何更改都將它運行到,丟失在退出的環境中進行的事實

import subprocess                
import atexit                 
import shlex                 

x="alias %s = 'less %s'" % ('a', 'whatever')         
y=shlex.split(x)                
atexit.register(lambda args: subprocess.call(args, shell=True), y)    

但是,:你必須在shell內運行subprocess.call

您最好創建一個文件,在其中放置所有這些別名,並在需要使用它們時手動採集它們。