[英]Execute python within bash script
我需要在shell脚本中执行以下代码。 通常,在诸如node.js之类的语言中,我可以编写node -e "code here"
的代码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()"
我想你可以使用here文档 。
例如,这是一个简单的测试脚本:
#!/bin/bash -ex
testnum=$1
if [ -z $testnum ]; then
testnum=-1.1
fi
python <<EOF
import math
print(math.fabs($testnum))
EOF
您可以通过将python逻辑放在单独的python脚本(需要命令行参数)中,然后仅在shell脚本中调用它来执行相同的操作。 例如:
python test.py $testnum
您可以 ...一旦获得超过... 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
(在将文本作为传递给解释器的命令之后运行)
更多信息在这里 。
不过,如果可能的话,我会将其放在文件中。 如果需要使端口可配置的功能,则可以在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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.