python安装工具带参数的console_scripts

时间:2016-11-23 00:10:21

标签: python setuptools

我想在命令行上实现我的pypy.py脚本,我需要使用安装工具,但是console_script不能正常工作,因为我的pypy.py需要两个参数,请指导我如何正确修改它以便工作commendline。

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)

2 个答案:

答案 0 :(得分:5)

入口点必须是带有参数的函数。如果要从命令行传入参数,请说如下调用它:

$ 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打印到控制台中。用户输入的错误处理是你自己的练习。

答案 1 :(得分:0)

类似于metatoaster的答案,您可以使用sys.argv https://docs.python.org/3/library/argparse.html来代替argsparse,这使argumnet的传递更加用户友好。

import argparse


if __name__ == "__main__":
  parser = argparse.ArgumentParser()
  parser.add_argument('--arg1', help='arg1 help')
  parser.add_argument('--arg2', help='arg2 help')
  args = parser.parse_args()
  print("arg1 {}, arg2 {}".format(args.arg1, args.arg2)

这样称呼:

pypy --arg1 1 --arg2 2