混合shell和python脚本是否可能?
我发誓我以前见过这样做,但现在找不到了。是否可以让shell脚本启动python interpeter“中流”,即:混合shell和python脚本是否可能?,python,linux,shell,Python,Linux,Shell,我发誓我以前见过这样做,但现在找不到了。是否可以让shell脚本启动python interpeter“中流”,即: 您可以使用此shell语法(在Unix文献中称为document): #/垃圾箱/垃圾箱 这是一个shell脚本 python您可以编写 exec python <<END_OF_PYTHON import sys print ("xyzzy") sys.exit(0) END_OF_PYTHON exec python当然,在我发布这篇文章之后,我马上想到了
您可以使用此shell语法(在Unix文献中称为document):
#/垃圾箱/垃圾箱
这是一个shell脚本
python您可以编写
exec python <<END_OF_PYTHON
import sys
print ("xyzzy")
sys.exit(0)
END_OF_PYTHON
exec python当然,在我发布这篇文章之后,我马上想到了一种方法:
#!/bin/sh
echo Shell
python <<EOF
import sys
print "Python"
sys.exit(0)
EOF
#/垃圾箱/垃圾箱
回声弹
python如果您的python
脚本非常短。您可以使用-c
选项将其作为字符串传递给python
:
python -c 'import sys; print "xyzzy"; sys.exit(0)'
或
我同意混合/混搭可以是一种非常强大的技术——不仅在脚本中,而且在命令行中(例如,perl内联已经被证明是非常成功的)。因此,我的小提示是关于bash/python中混合脚本的一行程序的另一个变体(除了kev提到的之外):
for VAR in $(echo 'import sys; print "x y z"; sys.exit(0)' | python -);do echo "$VAR"; done;
产生
x
y
z
+1:as执行优于仅调用python。在这种情况下,shebang是不必要的,只会被视为一种评论。@williampersell:你知道,我甚至没有注意到shebang。它不仅没有必要,而且实际上是误导性的,因为这不会调用env
。我想这个命令可能是execenvpython
python -c '
import sys
print("xyzzy")
sys.exit(0)
'
for VAR in $(echo 'import sys; print "x y z"; sys.exit(0)' | python -);do echo "$VAR"; done;
x
y
z