我想在命令行上实现我的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)
答案 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