【问题标题】:Execute python within bash script在 bash 脚本中执行 python
【发布时间】:2017-03-08 03:51:04
【问题描述】:

我需要在 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()"

【问题讨论】:

    标签: python bash unix centos webserver


    【解决方案1】:

    我猜你可以使用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 脚本中(接受命令行参数)然后在你的 shell 脚本中调用它来做同样的事情。例如:

    python test.py $testnum
    

    【讨论】:

      【解决方案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']

      【讨论】:

        猜你喜欢
        • 2012-06-24
        • 2023-04-03
        • 2013-07-13
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 2023-03-24
        • 1970-01-01
        相关资源
        最近更新 更多