我可以将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作为命令行参数提供一些指导吗?
感谢。
答案 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)