我需要在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()"
答案 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']