【问题标题】:Running Python script from command line opens script in the default text editor instead of executing script从命令行运行 Python 脚本会在默认文本编辑器中打开脚本,而不是执行脚本
【发布时间】:2012-11-10 21:19:31
【问题描述】:

我有与 Python 解释器关联的带有 .py 扩展名的文件。但是,当我在命令行键入此类文件的名称并按 ENTER 时,该文件将在默认文本编辑器 (Notepad++) 中打开,而不是使用关联的 Python 解释器运行。为什么?

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

我在 Windows Vista x64 上使用 Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32

更新

删除HKEY_CLASSES_ROOT\Unknown\shell\notepad++\command 键后(我在过去创建此键以将无扩展名的文件与 Notepad++ 相关联 - 请参阅 How to set the default program for opening files without an extension in Windows?),其值为 C:\Program Files (x86)\Notepad++\notepad++ %1,我收到此错误:

此文件没有与之关联的程序来执行 这个动作。在 Set Associations 控件中创建关联 面板。

更新 2

为了显示系统正常使用的所有注册表项以找出与 .py 扩展相关联的程序,我运行以下批处理文件 (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=

输出

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.

我还运行 Process Monitor(感谢 Maximus)以查看从命令行运行 a.py 时正在读取哪些注册表项。我已将过滤器设置为仅包含用于运行 a.py 文件的 cmd.exe 的 pid,并排除 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"

【问题讨论】:

  • @bgporter 这不是那个问题的重复。我不是在谈论不编写扩展就运行 Python 脚本。
  • 检查并在必要时重新创建您的 Python 文件 associations
  • @Piotr -- 你真的读过链接,还是只看标题?它向您展示了如何将 .py 文件与 python 解释器相关联。
  • @bgporter 你有没有注意到我过去曾编辑过这个问题?你显然不知道我在这里描述的问题是什么。

标签: python windows command-line file-association


【解决方案1】:

一般来说,我会确保关联不会被当前用户的设置覆盖:

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

但是,当我阅读您更新中的 Process Monitor 输出时,您的系统上似乎没有定义任何这些 HKCU 键。

我的下一步是在提升的cmd 控制台中运行以下命令:

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

据我所知,这会在HKLM\Software\Classes 中设置系统关联,而不会做任何其他事情。根据您问题中的信息,这似乎已经正确设置。所以我不知道assocftype 做了什么来解决这个问题。

【讨论】:

  • 也许问题与 32bit/64bit mismatch 有关。虽然我确保我运行的 cmd.exe 是 64 位的,但当我稍后运行 python 以在我的问题中报告其确切版本时,版本信息以 on win32 文本结尾。我现在无法复制它 - 不再有 on win32 后缀。此外,当查看由ftype 命令修改的注册表项时,我看到它也修改了Wow6432Node 对应项。也许Wow6432Node 版本的注册表项有问题,ftype 修复了这个问题。但是我记得 32 位密钥与 64 位密钥相同......
【解决方案2】:

这可能会有所帮助(将“打开”作为默认动词)?

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

还是这个(考虑到python.exe 路径周围的配额)?

[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\" %*"

【讨论】:

  • 最后机会 ;) 运行进程监视器并尝试在 cmd 提示符下运行 a。分析日志,相信能给你一点提示
  • 手动告诉python从注册表运行我的脚本:"C:\Python27\python.exe" "C:\Python27\tpt.py" "%1"`
【解决方案3】:

我一直在为这个问题苦苦挣扎,和 Piotr 一样。 eriksyn 的建议让我找到了一个工作系统。

由于 Notepad2 总是打开我的“我想要运行这个”调用,所以我一定有一些东西将所有文件与 Notepad2 相关联,现在我知道在哪里看(我之前尝试过运行进程监视器,但输出量太大)。

我的注册表中有HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 中包含Notepad2 内容的.py 条目。我假设 Notepad2 自己添加了这些,或者我在配置时以某种方式这样做了。特别是:

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

使用此注册表项和值,尝试运行 Python 脚本只会打开 Notepad2。

没有此注册表项,我的 Python 脚本实际上会执行,不再需要我输入“python

我很高兴。谢谢,堆栈溢出。

【讨论】:

    【解决方案4】:

    你不能用 GUI 的方式来做吗?

    “打开方式...” -> 浏览 -> python.exe 并勾选“始终使用此程序...”

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2017-01-16
    • 2017-12-07
    • 1970-01-01
    • 2016-12-15
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多