我正在使用 Python-c来执行单行循环,即:
-c
python -c "for r in range(10): print 'rob'"
这工作正常。 但是,如果我在for 循环之前导入模块,则会出现语法错误:
python -c "import sys; for r in range(10): print 'rob'" File "<string>", line 1 import sys; for r in range(10): print 'rob' ^ SyntaxError: invalid syntax
如何解决这个问题?
对我来说,将它作为一个单行线很重要,这样我就可以将它包含在Makefile中。
你可以做
echo -e "import sys\nfor r in range(10): print 'rob'" | python
或者没有管道:
python -c "exec(\"import sys\nfor r in range(10): print 'rob'\")"
或者
(echo "import sys" ; echo "for r in range(10): print 'rob'") | python
或SilentGhost 的回答
只需使用Return并在下一行输入:
python -c "import sys for r in range(10): print 'rob'" rob rob ...
或Crast的回答。
问题实际上不在于import语句。它与for循环之前的任何内容有关。或者更具体地说,内联块之前出现的任何内容。
例如,这些都有效:
python -c "import sys; print 'rob'" python -c "import sys; sys.stdout.write('rob\n')"
如果 import 是一个语句是一个问题,这会起作用,但它不会:
python -c "__import__('sys'); for r in range(10): print 'rob'"
对于您非常基本的示例,您可以将其重写为:
python -c "import sys; map(lambda x: sys.stdout.write('rob%d\n' % x), range(10))"
但是,lambdas 只能执行表达式,不能执行语句或多条语句,所以你可能仍然无法做你想做的事情。然而,在生成器表达式、列表推导、lambdas、sys.stdout.write、内置“map”和一些创造性的字符串插值之间,你可以做一些强大的单行。
问题是,你想走多远,在什么时候写一个.py你的makefile执行的小文件不是更好?
.py