微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

混合shell和python脚本可能吗?

我发誓我以前见过这个,但现在找不到。 是否有可能有一个shell脚本启动python interpeter“中stream”,即:

#!/bin/bash #shell stuff.. set +e VAR=aabb for i in abc; do echo $i done # same file! #!/usr/bin/env python # python would be given this fd which has been seek'd to this point import sys print ("xyzzy") sys.exit(0)

如何使用AWK从string中删除所有小写字符?

确定谁打开了一个TCP会话

在x86中,为什么我有相同的指令两次,反向操作数?

让我的模块成为一个命令

如何为自定义应用程序select一个静态端口号?

你可以使用这个shell语法(在Unix 文档中这里称之为文档 ):

#!/bin/sh echo this is a shell script python <<@@ print 'hello from Python!' @@

“<<”运算符之后的标记可以通过任意的标识符,人们经常使用EOF(文件结束)或EOD(文档结束)之类的东西。 如果标记开始一行,那么shell将其解释为程序的输入结束。

你可以写

exec python <<END_OF_PYTHON #!/usr/bin/env python import sys print ("xyzzy") sys.exit(0) END_OF_PYTHON

用Python替换Bash进程,并将指定的程序传递给Python的标准输入。 ( exec替换Bash进程, <<END_OF_PYTHON导致标准输入包含所有东西,直到END_OF_PYTHON 。

如果你的python脚本很短。 您可以使用-c选项将其作为字符串传递给python :

python -c 'import sys; print "xyzzy"; sys.exit(0)'

要么

python -c ' import sys print("xyzzy") sys.exit(0) '

当然,我发布这个之后,我想起了一个办法:

#!/bin/sh echo Shell python <<EOF import sys print "Python" sys.exit(0) EOF

我同意混合/混搭可以是一个相当强大的技术 – 不仅在脚本中,而且在命令行中(例如perl内联已经被证明是非常成功的)。 所以,我在bash / python中混合编写脚本的另一个变种(除了kev提到的)

for VAR in $(echo 'import sys; print "xyz"; sys.exit(0)' | python -);do echo "$VAR"; done;

产生

x y z

这对于简短的内联脚本/代码非常有用。 如果可以依靠bash脚本作为合适的粘合剂来编写一个大的,好的应用程序,那么可以让不同的团队成员用他们擅长的任何语言编写代码/脚本,然后可以简单地将他们的工作联系起来,如下所示。 当然,也可以假设一个应用程序有很多不同的运行时间。 @ user318904 @phs @piokuc

#!/bin/bash java hello #hello class bytecode to be in the path python hello.py elixir simple.exs perl hello.pl nodejs sum1.js coffee sum2.coffee #any other bash script can be put anywhere

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐