将字符串作为Python命令行参数传递
我能够将int和chars作为Python命令行参数传递,但无法成功地将字符串传递给以下对象:将字符串作为Python命令行参数传递,python,Python,我能够将int和chars作为Python命令行参数传递,但无法成功地将字符串传递给以下对象: 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) e
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
如下:
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 ‘one’ ‘two’
它可以看到arg的数量,但在尝试获取arg时抛出异常:
3
error
有人能提供一些关于如何将字符串作为命令行参数传递的指导吗
谢谢。您的shell将在python看到这些引用之前吃掉它们。试着这样做:
python test.py '"one"' '"two"'
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)
另一方面,命令行参数无论如何都是作为字符串传递的。像这样评价他们是很奇怪的;更好的模式是在需要数字时将字符串转换为数字,否则就将其作为字符串保留。这也将使您不必在命令行中引用填充字符串两次
argparse
模块可以自动为您处理这些内容 您的shell将在python看到这些引用之前吃掉它们。试着这样做:
python test.py '"one"' '"two"'
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)
另一方面,命令行参数无论如何都是作为字符串传递的。像这样评价他们是很奇怪的;更好的模式是在需要数字时将字符串转换为数字,否则就将其作为字符串保留。这也将使您不必在命令行中引用填充字符串两次
argparse
模块可以自动为您处理这些内容 optparse.OptionParser
可能对您有所帮助
您可以这样使用它:
python test.py '"one"' '"two"'
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)
optparse.OptionParser
可能对您有所帮助
您可以这样使用它:
python test.py '"one"' '"two"'
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)
不要对他们进行文字评估。是什么让你认为你应该这样做呢?与其只捕获你的异常,不如让它打印出完整的错误,看看你的代码有什么问题。使用像“一”这样的直接引号,而不是像“一”这样的书中引号。斯威尼罗德明白了:我一去掉ast.literal\u eval并使用sys.argv[1],它就工作了。我正在编写一个示例(Python的新版本),以前使用过ast.literal_eval,所以认为我需要它。Thanks@user3144462没问题。因为wim在他们的回答中也提到了这一点,所以在某个时候最好接受这一点。不要
ast.literalval
。是什么让你认为你应该这样做呢?与其只捕获你的异常,不如让它打印出完整的错误,看看你的代码有什么问题。使用像“一”这样的直接引号,而不是像“一”这样的书中引号。斯威尼罗德明白了:我一去掉ast.literal\u eval并使用sys.argv[1],它就工作了。我正在编写一个示例(Python的新版本),以前使用过ast.literal_eval,所以认为我需要它。Thanks@user3144462没问题。因为wim在他们的回答中也提到了这一点,所以最好在某个时候接受这样一个事实:optpasse是不推荐的。optpasse是不推荐的