一位同事最近向我发送了一个 bash 脚本,其中包含一些内联 Python。他使用的命令的形式为:
$ echo -e 'from foo import bar\nfor i in range(10):\n bar(i+1).thing = "something"\n\n' | python
该命令运行得很好,但我问他为什么不使用python -c
。经过进一步调查,我们无法将其转换为以下形式:python -c
会接受,因为看起来 Python 不允许在 for 循环之前使用语句,即使是用分号分隔的。
下面的第一个示例显示您可以导入并打印导入的对象。第二个示例显示您可以使用 for 循环并从 for 循环进行打印。第三个示例结合了前两个示例,结果是SyntaxError
。最后,第四个例子展示了SyntaxError
在 for 循环之前使用表达式时的结果:
$ python -c "from sys import argv; print argv"
['-c']
$ python -c "for v in [1,2,3,4]: print v"
1
2
3
4
$ python -c "from sys import argv; for v in argv: print v"
File "<string>", line 1
from sys import argv; for v in argv: print v
^
SyntaxError: invalid syntax
$ python -c "x = 5; for i in [1,2,3]: print i"
File "<string>", line 1
x = 5; for i in [1,2,3]: print i
^
SyntaxError: invalid syntax
事后看来,SyntaxError
这并不奇怪,因为代码在保存在脚本中时无效,并且语句的语法与空格限制相结合可以施加这种类型的限制。话虽这么说,有没有办法允许复合语句之前的语句通过python -c
?