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