繁体   English   中英

在bash脚本中执行python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM