2016-11-23 61 views
0

我想在命令行上實現我的pypy.py腳本,我需要使用安裝工具,但console_script不能正常工作,因爲我的pypy.py需要兩個參數,請指導我如何才能修改它適當地工作在commendline上。python安裝工具帶有參數的console_scripts

python.py

def main(agru1, argu2): 

    "do something" 

if __name__ == "__main__": 
     main() 

,當我有它在我的setup.py文件,如console_script如下

setup( 
    entry_points={ 
     'console_scripts': [ 

       'pypy = pypy.pypy:main'], 
    } 

) 

而且我得到以下錯誤,當我在命令行運行:

Traceback (most recent call last): 
File "/usr/local/bin/python", line 9, in <module> 
load_entry_point('Pypy==0.1', 'console_scripts', 'pypy')() 
TypeError: main() takes at least 2 arguments (0 given) 
+0

你的意思是從''sys.argv''獲取參數。它們沒有被傳入。你可以將參數解析庫應用到它來使它處理選項等等。 –

回答

1

入口點必須是一個函數,它需要論點。如果你想在命令行參數來傳遞,說你要調用它喜歡:

$ pypy a1 a2 

你需要從sys.argv,而不是閱讀。所以,你的Python模塊應該包含這樣的:

def program(arg1, arg2): 
    print(arg1, arg2) 

def main(): 
    import sys 
    arg1, arg2 = sys.argv[1], sys.argv[2] 
    program(arg1, arg2) 

if __name__ == "__main__": 
    main() 

運行如上面的命令會打印出a1 a2到控制檯。用戶輸入錯誤處理是您自己的練習。

+0

謝謝,我應該如何在設置中包含main(sys.argv [1],sys.argv [2]) .py(如上所述)? 錯誤仍然相同,如果我使用你的解釋....! – user3698773

+0

'setup.py'鉤入'distutils'或'setuptools'中,並且底層庫有自己的'sys.argv'處理命令,這些命令幾乎肯定會與你想要做的事情衝突。你有沒有嘗試按原樣運行我的代碼? – metatoaster

+0

是的,我在那之後回答了,並且在問題中提到了與上面提到的相同的錯誤。 – user3698773