将程序作为字符串传递给 Python 时使用导入和 for 循环

2024-05-06

一位同事最近向我发送了一个 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?


为了澄清 CDspace 的答案,请注意,与 Python 不同,Bash 中换行符不会终止字符串文字。所以你可以执行以下操作:

$python -c 'import sys
for i in range(10):
  print(i)

'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将程序作为字符串传递给 Python 时使用导入和 for 循环 的相关文章

随机推荐