在bash脚本中执行python

时间:2016-10-25 23:01:12

标签: python bash unix centos webserver

我需要在shell脚本中执行以下代码。通常在诸如node.js之类的语言中,我可以编写node -e "code here"来执行代码。如何使用Python复制此功能?

# Python server
python "import SimpleHTTPServer
import SocketServer
PORT = $pythonPort
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()"

2 个答案:

答案 0 :(得分:2)

我猜你可以使用here document

例如,这是一个简单的测试脚本:

#!/bin/bash -ex
testnum=$1

if [ -z $testnum ]; then
    testnum=-1.1
fi

python <<EOF
import math
print(math.fabs($testnum))
EOF

你可以通过将你的python逻辑放在一个单独的python脚本(需要命令行args)然后在你的shell脚本中调用它来做同样的事情。例如:

python test.py $testnum

答案 1 :(得分:2)

可以 ......只要你获得超过...... 3行,它就会非常令人困惑(至少对我而言),但你可以。例如:

#!/bin/bash
# Python server
pythonPort=8000
python -c "import SimpleHTTPServer;"`
`"import SocketServer;"`
`"PORT = $pythonPort; "`
`"print(PORT); "`
`"Handler = SimpleHTTPServer.SimpleHTTPRequestHandler; "`
`"httpd = SocketServer.TCPServer((\"\", PORT), Handler); "`
`"print(\"serving at port %s\" % PORT); "`
`"httpd.serve_forever()"

重要的部分是-c(作为传递给解释器的命令后运行文本)

更多信息here

但是,如果可能的话,我会把它放在一个文件中。如果您需要能够使端口可配置,可以在Python代码中使用sys.argsv并将其作为参数在命令调用中传递。

例如,将其放在脚本中:

run_server.py

#!/usr/bin/env python
# Python server
import sys
import SimpleHTTPServer
import SocketServer

PORT = int(sys.argv[1])
print(sys.argv)
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print("serving at port %s" % PORT)
httpd.serve_forever()

并使用python ./run_server.py 8000调用它sys.argv的内容是一个列表,其中第一项是脚本的名称,然后其余是调用中传递的参数。在这个例子中,那将是:['./run_server.py', '8000']