这是我的代码:
def main(*args):
# The following code will look for arguments and record their start and
# end positions.
arg = False
arg_invalid = False
arg_start = -1
arg_end = -1
i = 1
print("main args = " + str(args))
......剥离了不相关的代码......
if __name__ == "__main__":
print("sys args = " + str(sys.argv))
print("tuple'd args = " + str(tuple(sys.argv)))
main(sys.argv)
输出:
$ ./gmanager.py foo bar 128
sys args = ['./gmanager.py', 'foo', 'bar', '128']
tuple'd args = ('./gmanager.py', 'foo', 'bar', '128')
main args = (['./gmanager.py', 'foo', 'bar', '128'],)
如您所见,在调用main()
之后,main()
将其参数放入元组中。我不希望这样,因为它使复杂的参数/字符串引用(arg[x][y][z]
)。
有没有办法在我的main()
函数中接受参数作为它们的先前状态,还是可以从我的参数之外删除元组?
答案 0 :(得分:2)
直接传递列表:
def main(args):
...
main(sys.argv)
或使用*
执行参数解包:
def main(*args):
...
main(*sys.argv)
后者对于测试非常有用,因为你可以编写例如。
main('foo', 'arg1', 'arg2')
模拟命令行参数。
答案 1 :(得分:1)
由于您只需要一个参数main()
,并且您希望它是list
,只需删除*
中的def main
,如下所示:< / p>
def main(args):
print str(args)
if __name__ == "__main__":
import sys
main(sys.argv)