如何从Python脚本在默认编辑器中打开python文件

时间:2015-03-16 20:10:39

标签: python

当我尝试使用Windows时 webbrowser.open(fname)os.startfile(fname)os.system ('cmd /c "start %s"' % fname) 我的python脚本正在执行。

如何在默认编辑器中打开它进行编辑(如SQL脚本)

尝试了

import ctypes

shell32 = ctypes.windll.shell32
fname = r'C:\Scripts\delete_records.py'

shell32.ShellExecuteA(0,"open",fname,0,0,5)

它会在C:\Program Files\ibm\gsk8\lib64\C

打开文件资源管理器

2 个答案:

答案 0 :(得分:2)

默认打开编辑操作由ShellExecute WinAPI函数处理(操作在HKEY_CLASSES_ROOT子树中的注册表中定义)。

有几种方法可以从Python脚本访问WinAPI。

  1. 使用像pywin32这样的更好的包装器。它比ctypes更安全,但它是非标准的Python模块。即:

    import win32api
    win32api.ShellExecute(None, "edit", "C:\\Public\\calc.bat", None, "C:\\Public\\", 1)
    
  2. 使用ctypes。它比较棘手并且不控制参数,因此可能导致错误(除非您手动提供结果类型和参数类型)。

    import ctypes
    ShellExecuteA = ctypes.windll.shell32.ShellExecuteA
    ShellExecuteA(None, "edit", "C:\\Public\\calc.bat", None, "C:\\Public\\", 1)
    
  3. 要检查所需文件类型支持哪些操作,请执行以下操作:

    1. 运行regedit.exe
    2. 转到HKEY_CLASSES_ROOT并选择所需的附加信息,即.py。在左窗格中阅读(Default)值 - 它将是类名,即Python.File
    3. HKEY_CLASSES_ROOT中打开该类名称子树。它应该包含shell子树,您可以在其下找到可用的shell操作。对于我和Python脚本,它们是Edit with IDLEEdit with Pythonwin
    4. 将这些值作为ShellExecute()
    5. 的第二个参数传递

答案 1 :(得分:1)

"""
Open the current file in the default editor
"""

import os
import subprocess

DEFAULT_EDITOR = '/usr/bin/vi' # backup, if not defined in environment vars

path = os.path.abspath(os.path.expanduser(__file__))
editor = os.environ.get('EDITOR', DEFAULT_EDITOR)
subprocess.call([editor, path])