Running Python script from command line opens script in the default text editor instead of executing script

StackOverflow https://stackoverflow.com/questions/13326181

Pregunta

I have files with .py extension associated with Python interpreter. However when I type name of such a file at the command line and press ENTER the file is being opened in the default text editor (Notepad++) instead of being run with the associated Python interpreter. Why?

Z:\1>where python
c:\Program Files\Python\2.7\python.exe

Z:\1>reg query HKCR\.py /ve

HKEY_CLASSES_ROOT\.py
    (Default)    REG_SZ    Python.File


Z:\1>reg query HKCR\Python.File\shell\open\command /ve

HKEY_CLASSES_ROOT\Python.File\shell\open\command
    (Default)    REG_SZ    c:\Program Files\Python\2.7\python.exe "%1" %*


Z:\1>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Z:\1>type a.py
from __future__ import print_function; import sys; print(sys.executable); print(sys.version)
Z:\1>a.py    <--- this opens a.py in the default text editor

I'm on Windows Vista x64 using Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32

UPDATE

After deleting HKEY_CLASSES_ROOT\Unknown\shell\notepad++\command key (I created this key in the past in my quest to associate files without extension with Notepad++ - see How to set the default program for opening files without an extension in Windows?) which had value of C:\Program Files (x86)\Notepad++\notepad++ %1 I get this error:

This file does not have a program associated with it for performing this action. Create an association in the Set Associations control panel.

UPDATE 2

To display all registry keys used normally by system to find out what program is associated with .py extension I run the following batch file (python_assoc.query.bat):

@echo off
if "%~1" == "details" (
    set keypath=HKLM\Software\Classes
    echo ----- HKEY_LOCAL_MACHINE -----
    call :query
    set keypath=HKCU\Software\Classes
    echo.
    echo ----- HKEY_CURRENT_USER -----
    call :query
) else (
    set keypath=HKCR
    echo ----- HKEY_CLASSES_ROOT -----
    call :query
)   
goto end

:query
reg query %keypath%\.py /ve
reg query %keypath%\.pyw /ve
reg query %keypath%\.pyc /ve
reg query %keypath%\.pyo /ve

reg query %keypath%\Python.File\shell\open\command /ve
reg query %keypath%\Python.NoConFile\shell\open\command /ve
reg query %keypath%\Python.CompiledFile\shell\open\command /ve
goto :eof

:end
set keypath=

OUTPUT

Z:\1>python_assoc.query.bat details
----- HKEY_LOCAL_MACHINE -----

HKEY_LOCAL_MACHINE\Software\Classes\.py
    (Default)    REG_SZ    Python.File
HKEY_LOCAL_MACHINE\Software\Classes\.pyw
    (Default)    REG_SZ    Python.NoConFile
HKEY_LOCAL_MACHINE\Software\Classes\.pyc
    (Default)    REG_SZ    Python.CompiledFile
HKEY_LOCAL_MACHINE\Software\Classes\.pyo
    (Default)    REG_SZ    Python.CompiledFile
HKEY_LOCAL_MACHINE\Software\Classes\Python.File\shell\open\command
    (Default)    REG_SZ    c:\Program Files\Python\2.7\python.exe "%1" %*
HKEY_LOCAL_MACHINE\Software\Classes\Python.NoConFile\shell\open\command
    (Default)    REG_SZ    c:\Program Files\Python\2.7\pythonw.exe "%1" %*
HKEY_LOCAL_MACHINE\Software\Classes\Python.CompiledFile\shell\open\command
    (Default)    REG_SZ    c:\Program Files\Python\2.7\python.exe "%1" %*

----- HKEY_CURRENT_USER -----
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.

I also run Process Monitor (thanks Maximus) to see what registry keys are being read when running a.py from command line. I have set filter to include only pid of cmd.exe used to run a.py file and to exclude operations of type RegCloseKey.

"Operation","Path","Result","Detail"
"RegOpenKey","HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKLM\SOFTWARE\Microsoft\WINDOWS NT\CURRENTVERSION\AppCompatFlags\Custom\a.py","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer","SUCCESS","Desired Access: Query Value"
"RegQueryValue","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MaximizeApps","NAME NOT FOUND","Length: 144"
"RegOpenKey","HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer","SUCCESS","Desired Access: Query Value"
"RegQueryValue","HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\MaximizeApps","NAME NOT FOUND","Length: 144"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Drive\shellex\FolderExtensions","NAME NOT FOUND","Desired Access: Enumerate Sub Keys"
"RegOpenKey","HKCR\Drive\shellex\FolderExtensions","SUCCESS","Desired Access: Enumerate Sub Keys"
"RegQueryKey","HKCR\Drive\shellex\FolderExtensions","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Drive\shellex\FolderExtensions","NAME NOT FOUND","Desired Access: Maximum Allowed"
"RegEnumKey","HKCR\Drive\shellex\FolderExtensions","SUCCESS","Index: 0, Name: {fbeb8a05-beee-4442-804e-409d6c4515e9}"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Drive\shellex\FolderExtensions\{fbeb8a05-beee-4442-804e-409d6c4515e9}","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKCR\Drive\shellex\FolderExtensions\{fbeb8a05-beee-4442-804e-409d6c4515e9}","SUCCESS","Desired Access: Query Value"
"RegQueryKey","HKCR\Drive\shellex\FolderExtensions\{fbeb8a05-beee-4442-804e-409d6c4515e9}","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Drive\shellex\FolderExtensions\{fbeb8a05-beee-4442-804e-409d6c4515e9}","NAME NOT FOUND","Desired Access: Maximum Allowed"
"RegQueryValue","HKCR\Drive\shellex\FolderExtensions\{fbeb8a05-beee-4442-804e-409d6c4515e9}\DriveMask","SUCCESS","Type: REG_DWORD, Length: 4, Data: 32"
"RegEnumKey","HKCR\Drive\shellex\FolderExtensions","NO MORE ENTRIES","Index: 1, Length: 288"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKCR\.py","SUCCESS","Desired Access: Query Value"
"RegQueryKey","HKCR\.py","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Maximum Allowed"
"RegQueryValue","HKCR\.py\(Default)","SUCCESS","Type: REG_SZ, Length: 26, Data: Python.File "
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py\OpenWithProgids","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\.py\OpenWithProgids","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids","SUCCESS","Query: Cached, SubKeys: 0, Values: 2"
"RegEnumValue","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids","SUCCESS","Index: 0, Length: 220"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Python.File","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\Python.File","SUCCESS","Desired Access: Read"
"RegEnumValue","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids","SUCCESS","Index: 1, Length: 220"
"RegEnumValue","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids","NO MORE ENTRIES","Index: 2, Length: 220"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\.py","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\UserChoice","NAME NOT FOUND","Desired Access: Query Value"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Python.File ","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\Python.File ","NAME NOT FOUND","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\.py","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCR\.py","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py\shell","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\.py\shell","NAME NOT FOUND","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\.py","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\Unknown","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\Unknown","NAME NOT FOUND","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\SystemFileAssociations\.py","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\SystemFileAssociations\.py","NAME NOT FOUND","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKCR\.py","SUCCESS","Desired Access: Query Value"
"RegQueryKey","HKCR\.py","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\.py","NAME NOT FOUND","Desired Access: Maximum Allowed"
"RegQueryValue","HKCR\.py\PerceivedType","NAME NOT FOUND","Length: 144"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\SystemFileAssociations\.py","NAME NOT FOUND","Desired Access: Query Value"
"RegOpenKey","HKCR\SystemFileAssociations\.py","NAME NOT FOUND","Desired Access: Query Value"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\*","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes\*","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\*\shell","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\*\shell","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCR\*\shell","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\*\shell","NAME NOT FOUND","Desired Access: Maximum Allowed"
"RegQueryValue","HKCR\*\shell\(Default)","NAME NOT FOUND","Length: 144"
"RegQueryKey","HKCR\*\shell","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\*\shell\open","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\*\shell\open","NAME NOT FOUND","Desired Access: Read"
"RegQueryKey","HKCU\Software\Classes","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\AllFilesystemObjects","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\AllFilesystemObjects","SUCCESS","Desired Access: Read"
"RegQueryKey","HKCR\AllFilesystemObjects","SUCCESS","Query: Name"
"RegOpenKey","HKCU\Software\Classes\AllFilesystemObjects\shell","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCR\AllFilesystemObjects\shell","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKLM\Software\Microsoft\Windows\CurrentVersion\SideBySide","SUCCESS","Desired Access: Read"
"RegQueryValue","HKLM\COMPONENTS\PreferExternalManifest","NAME NOT FOUND","Length: 20"
"RegOpenKey","HKLM\Software\Microsoft\Windows\CurrentVersion\SideBySide\AssemblyStorageRoots","REPARSE","Desired Access: Enumerate Sub Keys"
"RegOpenKey","HKLM\COMPONENTS\AssemblyStorageRoots","NAME NOT FOUND","Desired Access: Enumerate Sub Keys"
"RegOpenKey","HKLM\Software\Microsoft\DirectUI","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKLM\Software\Microsoft\CTF\TIP\{0000897b-83df-4b96-be07-0fb58b01c4a4}\LanguageProfile\0x00000000\{0001bea3-ed56-483d-a2e2-aeae25577436}","SUCCESS","Desired Access: Read"
"RegQueryValue","HKLM\SOFTWARE\Microsoft\CTF\TIP\{0000897b-83df-4b96-be07-0fb58b01c4a4}\LanguageProfile\0x00000000\{0001bea3-ed56-483d-a2e2-aeae25577436}\Enable","SUCCESS","Type: REG_DWORD, Length: 4, Data: 1"
"RegOpenKey","HKCU","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\Keyboard Layout\Toggle","SUCCESS","Desired Access: Read"
"RegQueryValue","HKCU\Keyboard Layout\Toggle\Language Hotkey","SUCCESS","Type: REG_SZ, Length: 4, Data: 3"
"RegQueryValue","HKCU\Keyboard Layout\Toggle\Layout Hotkey","SUCCESS","Type: REG_SZ, Length: 4, Data: 3"
"RegOpenKey","HKCU","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\SOFTWARE\Microsoft\CTF\LangBarAddIn","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKLM\SOFTWARE\Microsoft\CTF\LangBarAddIn","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKCU","SUCCESS","Desired Access: Read"
"RegOpenKey","HKCU\Software\Microsoft\CTF\DirectSwitchHotkeys","SUCCESS","Desired Access: Read"
"RegEnumKey","HKCU\Software\Microsoft\CTF\DirectSwitchHotkeys","NO MORE ENTRIES","Index: 0, Length: 288"
"RegOpenKey","HKLM\SOFTWARE\Microsoft\CTF\KnownClasses","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKLM\SOFTWARE\Microsoft\CTF\KnownClasses","NAME NOT FOUND","Desired Access: Read"
"RegOpenKey","HKLM\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","SUCCESS","Desired Access: Read"
"RegQueryValue","HKLM\SOFTWARE\Microsoft\WINDOWS NT\CURRENTVERSION\FontSubstitutes\Segoe UI","NAME NOT FOUND","Length: 144"
"RegOpenKey","HKLM\SOFTWARE\Microsoft\CTF\KnownClasses","NAME NOT FOUND","Desired Access: Read"
¿Fue útil?

Solución

In general, I'd make sure the association isn't being overridden by settings for the current user:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\UserChoice
  • HKCU\Software\Classes\.py
  • HKCU\Software\Classes\Python.File

However, as I read the Process Monitor output in your update, it doesn't appear that any of these HKCU keys are defined on your system.

My next step would be to run the following in an elevated cmd console:

> assoc .PY=Python.File
> ftype Python.File=c:\Program Files\Python\2.7\python.exe "%1" %*

As far as I know, this sets the system association in HKLM\Software\Classes and does nothing else. Based on the information in your question, it seems this was already set correctly. So I don't know what either assoc or ftype did to fix the problem.

Otros consejos

May be this may help (make "open" as default verb)?

[HKEY_CLASSES_ROOT\Python.File\shell]
@="open"

or this (take into account quotas around python.exe path)?

[HKEY_CLASSES_ROOT\Python.File\shell\open]
@="Open"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"c:\\Program Files\\Python\\2.7\\python.exe\" \"%1\" %*"

I've been struggling with this problem for a while, same as Piotr. The suggestion by eriksyn led me to a working system.

Since Notepad2 was always opening my "I-want-to-run-this" invocations, it must be that I have something associating all files with Notepad2, and now I knew where to look (I tried running Process Monitor previously, but the output was too voluminous).

I have .py entries with Notepad2 contents in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts in my registry. I assume either Notepad2 added these itself, or I did this somehow when configuring things. In particular:

> reg query HKCU\Software\...\Explorer\FileExts\.py\UserChoice
HKEY_CURRENT_USER\Software\...\Explorer\FileExts\.py\UserChoice
    Progid    REG_SZ    Applications\Notepad2.exe

With this registry key and value, trying to run a Python script just opens Notepad2.

Without this registry key, my Python scripts actually execute, no longer requiring me to type "python <script>" to run them.

I'm happy. Thanks, Stack Overflow.

Can't you just do this the GUI way?

"Open with..." -> browse -> python.exe and tick "always use this program..."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top