首页 > 解决方案 > sys.argv 不传递多个参数

问题描述

有一个使用 AI 进行员工调度的项目。我在if len(sys.argv)<=1:sys.argv 没有传递超过 1 个参数时遇到问题,只有这个条件为真,输出为

'Usage is main [section|sets|instructor|pairs|run] [seed]'

我希望 sys.argv 得到 3 个参数,这样我就可以看到程序的其余部分是如何工作的。

我的代码

def main():
    import sys
    import random
    import tableutils
    print(len(sys.argv))
    nbcourse=7
    nbsets=6
    nbinstructor=5
    nbpairs=2
    if len(sys.argv)<=1:
        print('Usage is main [section|sets|instructor|pairs|run] [seed]')
        return
    elif len(sys.argv)>=3:
        random.seed(int(sys.argv[2]))
    S,nbsection=gen_section(nbcourse)
    R=gen_sets(nbsection,nbsets)
    I=gen_instructor(nbinstructor,nbsets,nbcourse,nbpairs)
    P=gen_pairs(nbpairs,nbsection)
    if sys.argv[1]=='section':
        tableutils.printmat(tableutils.wrapmat(S,[],['Id','Course id','Meeting Time']),True,0)
    elif sys.argv[1]=='sets':
        RR=[]
        for i in range(len(R)):
            RR.append([R[i][0],tableutils.set2string(R[i][1])])
        tableutils.printmat(tableutils.wrapmat(RR,[],['Id','Sections']),True,0)
    elif sys.argv[1]=='instructor':
        RI=[]
        for i in range(len(I)):
            RI.append([I[i][0],
                       tableutils.set2string(I[i][1]),
                       tableutils.set2string(I[i][2]),
                       tableutils.set2string(I[i][3]),
                       tableutils.set2string(I[i][4])])
        tableutils.printmat(tableutils.wrapmat(RI,[],['Id','Load','Course weights','Set weights','Pair weights']),True,0)
    elif sys.argv[1]=='pairs':
        RP=[]
        for i in range(len(P)):
            X=[str('(')+str(e[0])+str(' ')+str(e[1])+str(')') for e in P[i][1]]
            RP.append([P[i][0],tableutils.set2string(X)])
        tableutils.printmat(tableutils.wrapmat(RP,[],['Id','Section pairs']),True,0)
    elif sys.argv[1]=='run':
        rc,x,xs,v=solve_model(S,I,R,P)
        #tableutils.printmat(x)
        #print(xs)
        XS=[]
        for i in range(len(xs)):
            XS.append([xs[i][0], 
                       ['{0:2}'.format(e[0])+' : ('+'{0:2}'.format(e[1][0])+' '+'{0:2}'.format(e[1][1])+' '+'{0:2}'.format(e[1][2])+')' for e in xs[i][1]]])
        tableutils.printmat(tableutils.wrapmat(XS,[],['Instructor','Section (WC WR WP)']),True,1)
main()

我想让这个elif len(sys.argv)>=3:条件成真我该怎么办?我在 pycharm idle 上运行这个程序

标签: pythonartificial-intelligenceschedulingor-tools

解决方案


sys.argv[0] 始终是您的程序名称。如果传递了其他参数,则 len(sys.argv) 将 > 1,并且 sys.argv 的后续元素包含其他命令行参数。您似乎正在使用 0 个参数运行脚本,并且它正在打印一条消息,为您提供所需参数的选项。如果您当前正在运行

main

尝试运行

main run 0

或建议的论点的其他排列。

要在使用 PyCharm 时将参数传递到脚本中,请参阅此答案


推荐阅读