Sublime插件开发 启动Anaconda并运行对应Python脚本
啟動(dòng)Anaconda并運(yùn)行對應(yīng)Python腳本
- 事因
- 簡介
- Plugin
- 啟動(dòng)Anaconda并運(yùn)行對應(yīng)Python腳本
- 創(chuàng)建Plugin腳本文件
- autoOpenCommand腳本
- autoOpen腳本
- 設(shè)置Key Buildings
- 測試
- 遇到的問題
- 臨時(shí)解決方案
事因
Python是一個(gè)非常方便的腳本語言,因此本人會(huì)經(jīng)常使用到Python做一些事情。由于PyCharm太大,因此本人安裝了Sublime Text 3。在Sublime安裝了一些Anaconda插件和可運(yùn)行插件后,嘗試run了一下,發(fā)現(xiàn)一些Python庫提示版本錯(cuò)誤等問題;但是Anaconda終端控制臺(tái)運(yùn)行同一個(gè)腳本卻不會(huì)報(bào)錯(cuò)。
簡介
Sublime Text 3是支持自定義Command的,在Sublime Text 3安裝目錄中可以找到Sublime Text 3/Lib/Python38,里面有兩個(gè)腳本sublime.py和sublime_plugin.py。查看兩個(gè)文件的源代碼,發(fā)現(xiàn)其中sublime_plugin.py依賴sublime.py。
Plugin
Q:自定義Command如何創(chuàng)建呢?
A:Sublime工具欄中找到tools -> Developer -> new Plugin..,將文件保存在Sublime Text 3/Packages/User目錄下。
默認(rèn)創(chuàng)建的Plugin代碼如下:
Q:如何驗(yàn)證編寫的Command代碼是正確的?
A:在Sublime中使用 ctrl+` 可以打開Console,輸入view.run_command("example")即可執(zhí)行ExampleCommand腳本。
Q:view.run_command(commandStr)中的commandStr是根據(jù)什么樣的規(guī)則來的?
A:AaaBbbCommand類的commandStr為aaa_bbb,aaaBbbCommand類的commandStr為aaa_bbb。
Q:該如何設(shè)置快捷鍵來運(yùn)行自定義的Command?
A:Sublime中找到Perferences -> Key Buildings,在右邊窗口中輸入格式如{ "key" : ["快捷鍵"], "command" : "自定義命令" }的Json內(nèi)容。
啟動(dòng)Anaconda并運(yùn)行對應(yīng)Python腳本
創(chuàng)建Plugin腳本文件
Sublime工具欄中找到tools -> Developer -> new Plugin..,將下面兩個(gè)腳本文件保存在Sublime Text 3/Packages/User目錄下。
autoOpenCommand腳本
import os import sublime import sublime_pluginclass autoOpenCommand(sublime_plugin.TextCommand):def run(self, edit):# 獲取當(dāng)前選中文件的路徑filepath = self.view.file_name()# 創(chuàng)建cmd命令commands = []# 進(jìn)入Anaconda腳本目錄commands.append(r'cd C:\Users\xxx\Anaconda3\Scripts')# 激活A(yù)naconda環(huán)境commands.append(r'activate.bat')# 進(jìn)入autoOpenCommand腳本所在目錄commands.append(r'cd ' + os.path.abspath(os.path.dirname(__file__)))# 運(yùn)行另外一個(gè)python程序: python autoOpen.py arg1commands.append(r'python autoOpen.py ' + filepath)# 制作成1行命令command = ""for i in range(len(commands)):command = command + commands[i] + (" & " if i != len(commands)-1 else "")# 開啟cmd并且運(yùn)行commandcommand = r'%windir%\System32\cmd.exe /c "{0}"'.format(command)os.system(command)autoOpen腳本
import os import sys import multiprocessingif __name__ == "__main__":# 獲取命令行輸入?yún)?shù)if len(sys.argv) <= 1:exit(0)# 由于傳入的文件可能包含空格, 因此需要進(jìn)行拼接filepath = ""for i in range(len(sys.argv)):if i == 0:continuefilepath = filepath + " " + sys.argv[i]# 分隔目錄和文件名index = filepath.rfind('\\')# 命令commands = []# 進(jìn)入Anaconda腳本目錄commands.append(r'cd C:\Users\xxx\Anaconda3\Scripts')# 激活A(yù)naconda環(huán)境commands.append(r'activate.bat')# 進(jìn)入Sublime選中腳本所在目錄commands.append(r'cd ' + filepath[:index])# 運(yùn)行腳本commands.append(r'python ' + filepath[index+1:])# 制作成1行命令command = ""for i in range(len(commands)):command = command + commands[i] + (" & " if i != len(commands)-1 else "")command = r'%windir%\System32\cmd.exe /K "{0}"'.format(command)# 開啟一個(gè)進(jìn)程p = multiprocessing.Process(target=os.system, args=(command,))p.start()設(shè)置Key Buildings
Sublime中找到Perferences -> Key Buildings。
[{ "keys": ["f5"], "command": "auto_open" }, ]測試
編寫腳本,按F5執(zhí)行即可。
遇到的問題
由于Sublime是交互式運(yùn)行的,因此不能直接開啟一個(gè)進(jìn)程。autoOpenCommand類有一個(gè)錯(cuò)誤,os.system(command)運(yùn)行后并不會(huì)馬上結(jié)束,意味著Sublime將卡住,除非關(guān)閉Anaconda控制臺(tái)。
臨時(shí)解決方案
將autoOpenCommand腳本中的os.system(command)改為threading.Thread(target=os.system, args=(command,)).start()。
import os import threading import sublime import sublime_pluginclass autoOpenCommand(sublime_plugin.TextCommand):def run(self, edit):# 獲取當(dāng)前選中文件的路徑filepath = self.view.file_name()# 創(chuàng)建cmd命令commands = []# 進(jìn)入Anaconda腳本目錄commands.append(r'cd C:\Users\zengzhiwen.pinkz\Anaconda3\Scripts')# 激活A(yù)naconda環(huán)境commands.append(r'activate.bat')# 進(jìn)入autoOpenCommand腳本所在目錄commands.append(r'cd ' + os.path.abspath(os.path.dirname(__file__)))# 運(yùn)行另外一個(gè)python程序: python autoOpen.py arg1commands.append(r'python autoOpen.py ' + filepath)# 制作成1行命令command = ""for i in range(len(commands)):command = command + commands[i] + (" & " if i != len(commands)-1 else "")# 開啟cmd并且運(yùn)行commandcommand = r'%windir%\System32\cmd.exe /c "{0}"'.format(command)threading.Thread(target=os.system, args=(command,)).start()總結(jié)
以上是生活随笔為你收集整理的Sublime插件开发 启动Anaconda并运行对应Python脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D 单例模式
- 下一篇: 大厂的产品经理是怎样进行产品迭代的