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