我使用Python和-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中。


当前回答

使用python -c加三引号:

python -c """
import os
os.system('pwd')
os.system('ls -l')
print('Hello, World!')
for _ in range(5):
    print(_)
"""

其他回答

只需使用Return并在下一行输入它:

python -c "import sys
for r in range(10): print 'rob'"

rob
rob
...

如果你的系统是posix .2兼容的,它应该提供printf实用程序:

printf "print 'zap'\nfor r in range(3): print 'rob'" | python

zap
rob
rob
rob

这种风格也可以在makefile中使用(事实上它经常被使用)。

python - <<EOF
import random
for r in range(3): print(random.randint(1, 42))
EOF

或者用硬标签:

python - <<-EOF
    import random
    for r in range(3): print(random.randint(1, 42))
EOF
# Important: Replace the indentation above w/ hard tabs.

在上述情况下,前导制表符也被删除(并且可以实现一些结构化的外观)。

EOF可以容忍没有出现在这里文档中的任何标记词,出现在一行的开头(另请参阅bash手册页中的文档或这里的文档)。

单/双引号和反斜杠无处不在:

python -c 'exec("import sys\nfor i in range(10): print \"bob\"")'

更好:

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

注意:在某些系统上,可执行python适用于python 2,可能不可用。可执行的python3是针对python3的。

你可以这样做

echo -e "import sys\nfor r in range(10): print 'rob'" | python

或没有管道:

python -c "exec(\"import sys\nfor r in range(10): print 'rob'\")"

Or

(echo "import sys" ; echo "for r in range(10): print 'rob'") | python

或者沉默鬼的回答,或者卡斯特的回答。