Khi bạn thực thi một tập lệnh mà không nhập "python" ở phía trước, bạn cần biết hai điều về cách Windows gọi chương trình. Đầu tiên là tìm hiểu loại tệp mà Windows nghĩ đó là:
C: \> assoc .py
.py = Python.File
Tiếp theo, bạn cần biết cách Windows đang thực thi mọi thứ với tiện ích mở rộng đó. Nó được liên kết với loại tệp "Python.File", vì vậy lệnh này hiển thị những gì nó sẽ làm:
C: \> ftype Python.File
Python.File = "c: \ python26 \ python.exe" "% 1"% *
Vì vậy, trên máy của tôi, khi tôi nhập "blah.py foo", nó sẽ thực thi lệnh chính xác này, không có sự khác biệt về kết quả so với khi tôi đã tự nhập toàn bộ:
"c: \ python26 \ python.exe" "blah.py" foo
Nếu bạn nhập cùng một thứ, bao gồm cả dấu ngoặc kép, thì bạn sẽ nhận được kết quả giống như khi bạn chỉ nhập "blah.py foo". Bây giờ bạn đã có thể tự tìm ra phần còn lại của vấn đề.
(Hoặc đăng thông tin hữu ích hơn trong câu hỏi của bạn, chẳng hạn như bản sao cắt và dán thực tế của những gì bạn thấy trong bảng điều khiển. Lưu ý rằng những người làm loại điều đó sẽ được bình chọn cho câu hỏi của họ và họ nhận được điểm danh tiếng và nhiều người hơn có khả năng giúp họ có câu trả lời tốt.)
Nhận được từ các bình luận:
Ngay cả khi assoc và ftype hiển thị thông tin chính xác, có thể xảy ra trường hợp các đối số bị loại bỏ. Điều có thể giúp ích trong trường hợp đó là trực tiếp sửa các khóa đăng ký có liên quan cho Python. Đặt
HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
chìa khóa cho:
"C:\Python26\python26.exe" "%1" %*
Có thể, trước đây, %*
đã bị mất tích. Tương tự, đặt
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
đến cùng một giá trị. Xem http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
Đường dẫn đăng ký có thể khác nhau, sử dụng python26.exe
hoặc python.exe
hoặc bất kỳ cái nào đã có trong sổ đăng ký.
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command