2012-11-10 39 views
5

Tôi có các tệp có phần mở rộng là .py được kết hợp với trình thông dịch Python. Tuy nhiên khi tôi gõ tên của một tập tin như vậy tại dòng lệnh và bấm ENTER tệp đang được mở trong trình soạn thảo văn bản mặc định (Notepad ++) thay vì được chạy với trình thông dịch Python liên quan. Tại sao?Chạy tập lệnh Python từ dòng lệnh mở tập lệnh trong trình soạn thảo văn bản mặc định thay vì thực thi tập lệnh

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 

Tôi đang trên Windows Vista x64 sử dụng Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32

CẬP NHẬT

Sau khi xóa HKEY_CLASSES_ROOT\Unknown\shell\notepad++\command chìa khóa (Tôi tạo phím này trong quá khứ trong việc tìm kiếm của tôi để liên kết tập tin mà không mở rộng với Notepad ++ - xem How to set the default program for opening files without an extension in Windows?) có giá trị là C:\Program Files (x86)\Notepad++\notepad++ %1 Tôi nhận được lỗi này:

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

CẬP NHẬT 2

Để hiển thị tất cả các khóa registry sử dụng bình thường của hệ thống để tìm ra những chương trình có liên quan đến .py phần mở rộng tôi chạy tập tin thực thi sau (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. 

Tôi cũng chạy Process Monitor (cảm ơn Maximus) để xem những khóa registry nào đang được đọc khi chạy a.py từ dòng lệnh. Tôi đã đặt bộ lọc để chỉ bao gồm pid của cmd.exe được sử dụng để chạy tệp a.py và loại trừ các hoạt động của loại 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" 
+1

bản sao có thể có của [Tạo các tập lệnh Python chạy trên Windows mà không chỉ định phần mở rộng ".py"] (http://stackoverflow.com/questions/9037346/making-python-scripts-run-on-windows-without-specifying- py-extension) – bgporter

+0

@bgporter Nó không trùng lặp với câu hỏi đó. Tôi không nói về việc chạy kịch bản Python mà không cần viết phần mở rộng của nó. –

+0

Kiểm tra và tạo lại nếu cần tệp Python của bạn [liên kết] (http://stackoverflow.com/a/5586761/355230). – martineau

Trả lời

4

Nói chung, tôi muốn chắc chắn rằng hiệp hội không được ghi đè bởi cài đặt cho người dùng hiện tại:

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

Tuy nhiên, khi tôi đọc đầu ra của Trình theo dõi Quá trình trong bản cập nhật của bạn, nó không xuất hiện mà bất kỳ khóa nào trong số các khóa HKCU này được xác định trên hệ thống của bạn.

bước tiếp theo của tôi sẽ được chạy sau trong một cao cmd console:

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

Theo như tôi biết, điều này đặt ra mối liên hệ trong HKLM\Software\Classes và không có gì khác. Dựa trên thông tin trong câu hỏi của bạn, có vẻ như điều này đã được đặt chính xác. Vì vậy, tôi không biết assoc hoặc ftype đã làm gì để khắc phục sự cố.

+0

Có thể sự cố có liên quan đến 32 bit/64bit * không khớp *. Mặc dù tôi đã chắc chắn 'cmd.exe' tôi đã chạy là 64bit, khi tôi chạy' python' sau đó để báo cáo phiên bản chính xác của nó trong câu hỏi của tôi, thông tin phiên bản đã kết thúc bằng văn bản 'on win32'. Tôi không thể tái tạo nó bây giờ - không có hậu tố 'trên win32' nữa. Ngoài ra khi nhìn vào các khóa registry đang được sửa đổi bởi lệnh 'ftype', tôi thấy nó sửa đổi' các đối tác Wow6432Node'. Có thể đã xảy ra sự cố với phiên bản 'Wow6432Node' của khóa đăng ký và 'ftype' đã sửa lỗi này. Tuy nhiên tôi nhớ rằng các khóa 32 bit giống với các khóa 64 bit ... –

1

Có thể điều này có thể giúp (làm "mở" làm động từ mặc định)?

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

hoặc điều này (tính đến hạn ngạch khoảng python.exe đường dẫn)?

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

Không có điều nào ở trên hữu ích. –

+0

Cơ hội cuối cùng;) Chạy Process Monitor và thử chạy lệnh 'a' trong dấu nhắc cmd. Phân tích nhật ký, tôi tin rằng nó có thể cung cấp cho bạn một gợi ý – Maximus

+0

Tự động cho python chạy tập lệnh của tôi từ sổ đăng ký: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" ' – YumYumYum

-1

Bạn không thể làm điều này theo cách GUI?

"Open with ..." -> browse -> python.exe và đánh dấu vào "luôn sử dụng chương trình này ..."

+0

Khi tôi chọn * Mở bằng ... * Tôi nhận được lỗi tương tự như được hiển thị trong bản cập nhật của mình. Xem hộp thoại [Chọn chương trình mặc định không hiển thị sau khi chọn Mở với mục nhập trong menu ngữ cảnh] (http://superuser.com/questions/69193/) –

0

Tôi đã đấu tranh với vấn đề này một lúc, giống như Piotr. Đề nghị của eriksyn dẫn tôi đến một hệ thống làm việc.

Vì Notepad2 luôn mở lời gọi "I-muốn-chạy-này", nên tôi phải liên kết tất cả các tệp với Notepad2 và bây giờ tôi biết nơi cần tìm (Tôi đã thử chạy Process Monitor trước đây , nhưng đầu ra quá lớn).

Tôi có .py mục có nội dung Notepad2 trong HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts trong sổ đăng ký của mình. Tôi cho rằng Notepad2 đã tự thêm vào, hoặc tôi đã làm điều này bằng cách nào đó khi cấu hình mọi thứ. Cụ thể:

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

Với khóa và giá trị đăng ký này, cố gắng chạy tập lệnh Python vừa mở Notepad2.

Nếu không có khóa đăng ký này, các tập lệnh Python của tôi thực sự thực thi, không còn yêu cầu tôi nhập "python < script>" để chạy chúng.

Tôi rất vui. Cảm ơn, Stack Overflow.

Các vấn đề liên quan