2011-10-22 42 views
14

Tôi có một loạt các tập lệnh được viết bằng Python. Tôi chạy chúng từ dấu nhắc lệnh Windows nhưChạy tập lệnh Python từ dòng lệnh của Windows, đối số không được thông qua

c:> my_script.py arg1 arg2 arg3 

Điều này hoạt động trong mọi máy tính và mọi phiên bản Windows từ nhiều năm trước. Chỉ cần bây giờ nó đã bị hỏng trên hệ thống Windows 7 của tôi. Tập lệnh được tải và thực hiện. Nhưng không có đối số nào được chuyển vào tập lệnh.

Để minh họa điều này, tôi có một kịch bản có tên py_echo.py:

from pprint import pprint as pp 
import sys 

if __name__ =='__main__': 
    pp(sys.argv) 

Sau đó, tôi thực hiện nó với đối số a, b, c. Không ai trong số họ được thông qua.

c:\Python27\Lib\site-packages>py_echo.py a b c 
['C:\\0\\usr\\bin\\py_echo.py'] 

Nếu tôi chạy python.exe một cách rõ ràng, các đối số được truyền một cách chính xác

c:\Python27\Lib\site-packages>python.exe c:\0\usr\bin\py_echo.py a b c 
['c:\\0\\usr\\bin\\py_echo.py', 'a', 'b', 'c'] 

Nó được làm việc trước đó. Nó chỉ bắt đầu phá vỡ sau khi tôi gỡ cài đặt một phiên bản cũ của phiên bản Python và mô-đun từ máy tính của tôi. Cài đặt lại Python không giúp được gì. Tôi tự hỏi tôi có thể làm gì để sửa lỗi này?

Tôi đã trở nên rất phụ thuộc vào các tập lệnh của mình mà tôi đã xây dựng qua nhiều năm. Tôi cảm thấy rất khuyết tật khi họ phá vỡ :(

+1

Các bạn đã thử này: http://stackoverflow.com/questions/2640971/windows-is-not-passing-command-line-arguments-to-python-programs-executed-from -t –

+0

Cảm ơn tất cả các bạn. Tôi tìm thấy một sợi khác trên điểm Perl cho cùng một giải pháp. http://stackoverflow.com/questions/444388/how-can-i-pass-command-line-arguments-via-file-association-in-vista-64 –

+0

Tương tự ở đây cho Python: http://stackoverflow.com/questions/2437167/issues-running-python-script-in-command-nhắc-cụ thể-với-dòng lệnh. (Tuy nhiên, giải pháp không hoạt động trên Windows 7). – bavaza

Trả lời

3

để di chuyển câu trả lời cho sO (chứ không phải là liên kết trong Jon's answer):

Sửa đổi hai regist sau ries để các đối số được truyền cùng với Python:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command 
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 

Thêm %* đến "C:\PythonXX\python.exe" "%1" hiện có, do đó phím bây giờ trông giống như: "C:\PythonXX\python.exe" "%1" %*.

Nguồn: http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

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