我写了一个我想从ubuntu shell调用的python脚本。我的函数的一个参数是元组列表。但是,当我编写这个元组列表时,会引发以下错误:
bash:意外令牌附近的语法错误'('
如何忽略'('?
调用:
python scriptName.py [(1,2,3), (4,3,5), (3,4,5)]
答案 0 :(得分:4)
shell不喜欢你的参数列表,因为它包含对shell有特殊意义的字符。
你可以通过引用或逃避来解决这个问题;
python scriptName.py '[(1,2,3), (4,3,5), (3,4,5)]'
或者如果你的脚本真的需要三个单独的参数并将它们自己粘合在一起
python scriptName.py '[(1,2,3),' '(4,3,5),' '(3,4,5)]'
更好的是,更改脚本以便它可以读取输入格式,这对shell来说不那么具有挑战性。对于大型和/或复杂的数据集,脚本可能应该读取标准输入(或文件)而不是命令行参数。
(圆括号开始一个子shell,也用在例如case
语句的语法中。方括号用于通配符。)
答案 1 :(得分:1)
您需要引用您的参数,因此它将被视为单个字符串。然后你可以从sys.argvs:
访问它#!/usr/bin/env python
import sys
import ast
try:
literal = sys.argv[1]
except KeyError:
print "nothing to parse"
sys.exit(1)
try:
obj = ast.literal_eval(literal)
except SyntaxError:
print "Could not parse '{}'".format(literal)
sys.exit(2)
print repr(obj)
print type(obj)
然后在bash中:
$ python literal.py "[(1,2,3), (4,3,5), (3,4,5)]"
[(1, 2, 3), (4, 3, 5), (3, 4, 5)]
<type 'list'>
有关bash中命令行语法的更多信息,请参阅:
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Syntax