sys.argv不能传递多个参数

时间:2019-01-23 15:21:48

标签: python artificial-intelligence scheduling or-tools

有一个使用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空闲时运行该程序

2 个答案:

答案 0 :(得分:0)

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

main

尝试运行

main run 0

或建议参数的其他排列方式。

有关在使用PyCharm时将参数传递到脚本的信息,请参见this answer

答案 1 :(得分:-1)

我选择您将使用argparse。 并且,如果要输入1 args,则将写检查2。     如果len(sys.argv)<= 2:

因为sys.argv [0]是程序名。 (例如~~ .py) 因此sys.argv总是有1个项目。