2

When I try on Windows webbrowser.open(fname) or os.startfile(fname) or os.system ('cmd /c "start %s"' % fname) my python script is getting executed.

How to open it for edit in default editor (like SQL script)

Edit:

import ctypes

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

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

it opens file explorer at C:\Program Files\ibm\gsk8\lib64\C

5
  • Are you asking about Windows? It thing ShellExecute should do the trick. It is available from various Win32 API wrappers like pywin32 Commented Mar 16, 2015 at 20:18
  • Possible duplicate of stackoverflow.com/a/435669/1909577 Commented Mar 16, 2015 at 20:26
  • @myaut Sorry, it's on Windows. Commented Mar 16, 2015 at 20:36
  • @VinodSharma I do not see solution there Commented Mar 16, 2015 at 20:39
  • 1
    > tried < you should write "edit" instead "open" as second parameter of ShellExecute (of course it works if appropriate operation is defined in registry in HKEY_CLASSES_ROOT) Commented Mar 16, 2015 at 20:43

3 Answers 3

3
"""
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])
Sign up to request clarification or add additional context in comments.

Comments

2

Default open and edit actions are handled by ShellExecute WinAPI function (actions are defined in registry in HKEY_CLASSES_ROOT subtree).

There are couple of way to access WinAPI from Python script.

  1. Using nicer wrapper like pywin32. It is safer than ctypes, but it is non-standard Python module. I.e:

    import win32api
    win32api.ShellExecute(None, "edit", "C:\\Public\\calc.bat", None, "C:\\Public\\", 1)
    
  2. Using ctypes. It is trickier and doesn't control arguments, so may cause fault (unless you provide result type and arguments type manually).

    import ctypes
    ShellExecuteA = ctypes.windll.shell32.ShellExecuteA
    ShellExecuteA(None, "edit", "C:\\Public\\calc.bat", None, "C:\\Public\\", 1)
    

To check which actions are supported for desired filetype, do the following:

  1. Run regedit.exe
  2. Go to HKEY_CLASSES_ROOT and pick desired extension, i.e. .py. Read (Default) value on left pane - it would be class name, i.e. Python.File.
  3. Open that class name subtree in HKEY_CLASSES_ROOT. It should contain shell subtree, under which you will find available shell actions. For me and Python scripts they are Edit with IDLE and Edit with Pythonwin.
  4. Pass these values as second parameter of ShellExecute()

Comments

0

As per the documentation of os.startfile, you can define an operation to execute. So os.startfile(fname,operation='edit') shoudl work for what you want. See also this answer.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.