1

これが私のコードです:

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()か、または引数の外側からタプルを取り除くことはできますか?

4

2 に答える 2

2

リストを直接渡すか:

def main(args):
    ...

main(sys.argv)

または*、引数のアンパックを実行するために使用します。

def main(*args):
    ...

main(*sys.argv)

後者は、たとえば次のように記述できるため、テストに役立ちます。

main('foo', 'arg1', 'arg2')

コマンドライン引数をシミュレートします。

于 2013-03-12T19:33:03.577 に答える
1

に 1 つのパラメーターがmain()必要であり、それを にしたいので、次のようにinlistを取り除くだけです。*def main

def main(args):
  print str(args)

if __name__ == "__main__":
  import sys
  main(sys.argv)
于 2013-03-12T19:30:02.807 に答える