将字符串作为Python命令行参数传递

时间:2014-01-03 15:37:11

标签: python

我可以将int和chars作为Python命令行参数传递,但无法成功将Strings传递给以下内容:

if __name__ == '__main__' :
    try :
        print(len(sys.argv))
        arg1 = ast.literal_eval(sys.argv[1])
        arg2 = ast.literal_eval(sys.argv[2])
        print(arg1)
        print(arg2)
    except Exception :
        print('error')

以下作品:

python test.py 1 2

并打印:

3
1
2

如下:

python test.py'1''2'

也打印

3
1
2

但是,以下情况不起作用:

python test.py ‘one’ ‘two’

它会看到args的数量,但会抛出异常试图抓住它们:

3
error

有人可以就如何将Strings作为命令行参数提供一些指导吗?

感谢。

2 个答案:

答案 0 :(得分:3)

你的shell会在python看到之前吃那些引号。试试这样:

python test.py '"one"' '"two"'

顺便说一句,命令行args无论如何都是作为字符串传递的。 literal_eval这样的人很奇怪;更好的模式是在需要数字时将字符串转换为数字,否则将其保留为字符串。这也可以避免在命令行上两次引用字符串。

argparse模块可以自动为您处理这些内容。

答案 1 :(得分:0)

optparse.OptionParser可能对您有所帮助。

你可以像这样使用它:

from optparse import OptionParser
if __name__ == "__main__":
    parser = OptionParser(version="%prog 1.0.0")
    parser.add_option("-c", "--config", action="store", dest="config_file",
                      default="test", type="string",
                      help="let prog load a specified configure file")
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
                      default=False, help="let prog run in verbose model")
    options, args = parser.parse_args()
    if options.verbose:
        print "run in verbose model"
    print "configure file is %s"%(options.config_file)