sublime插件調用第三方程序

在sublime插件中調用第三方的程序(如系統命令行),是經過subprocess模式來進行的,關於subprogress中包含的方法及參數,請參看這裏: http://www.oschina.net/question/234345_52660

一、經常使用方法

通常插件開發中,咱們用到的是這個方法:
subprocess.Popen()
將開闢一個新的子進程並返回一個Popen對象,該對象有一個重要的方法:
popen.communicate(input)
該方法可與第三方程序通訊,輸入及接收輸出,這樣咱們就能夠獲得第三方程序運行時出現的信息了
input就是一個輸入,可爲空。
這個方法返回一個元組,裏面有兩個值,一個是輸出,一個出錯的信息。輸出的值已經對換行符做了處理,因此咱們獲得的值只是一行字符串。咱們要正常格式顯示的話就要處理一下,如下是處理的程序:
stdout=popen.communicate()
print(re.sub("\\n","\n",stdout))


二、在sublime text 2和sublime text 3中調用的區別

在開發過程當中我發現sublime text 3不能自動搜索系統路徑(PATH)中的程序,而是要指定具體的程序位置才能正常運行,如compile_scripts.sh中使用到了luajit,它在/usr/local/bin/luajit這個位置,compile_scripts.sh中沒有指定這個具體的位置,在sublime text 2中運行沒有問題,但在sublime text 3中沒有成功,那咱們應該怎麼辦呢,這就用到一個參數env了,這個參數能夠設置環境變量,它是一個字典類型
subprocess.Popen(...,env={"luajit":"/usr/local/bin/luajit"})
經過上面的設置就能正確運行luajit了。下面是一個完整的使用過程:
args=["quick_cocos2d-x/bin/compile_scripts.sh","-i","scripts","-o","res/game.zip"]
process=subprocess.Popen(args,cwd=path,env={"luajit":"/usr/local/bin/luajit"})    
stdout=process.communicate()
print(re.sub("\\n","\n",stdout))
相關文章
相關標籤/搜索