【问题标题】:How can I add parameters to a Python Shell command?如何向 Python Shell 命令添加参数?
【发布时间】:2020-02-26 07:34:52
【问题描述】:

我有一个 Django + Python 应用程序。 我有一个将需求作为命令行选项的 python 脚本。

对我来说,问题是当我尝试输入命令行参数时,脚本无法执行。当我取出命令行参数时,它运行良好。 我需要那些命令行参数。

当在 django HTML 首页中单击按钮时,我正在使用带有 Python Shell 的节点 JS 来执行 python 脚本。

这是我的代码:

let {PythonShell} = require('python-shell')
var path = require("path")

function track_object() {
  //document.getElementById("detect").value = "One moment please ..."
  var python = require("python-shell")
  var path = require("path")

//let {PythonShell} = require('python-shell')

    var options = {
    scriptPath : path.join(__dirname, '/../engine/opencv-object-tracking/'),
    pythonPath : '/usr/bin/python'
    }

  **//let pyshell = new PythonShell("opencv_object_tracking.py --video dashcam_boston.mp4 --tracker csrt", options);
  let pyshell = new PythonShell("opencv_object_tracking.py", options);**

}

注意:两行粗体显示脚本的调用有无参数

请告诉我用 Python Shell 传递命令行参数的正确方法是什么。

***** 编辑 ****** 这是我的编辑 argparse:

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", type=str,
    help="path to input video file")
ap.add_argument("-t", "--tracker", type=str, default="csrt",
    help="OpenCV object tracker type")
args = vars(ap.parse_args())

# extract the OpenCV version info
(major, minor) = cv2.__version__.split(".")[:2]

# if we are using OpenCV 3.2 OR BEFORE, we can use a special factory
# function to create our object tracker
if int(major) == 3 and int(minor) < 3:
    tracker = cv2.Tracker_create(args["tracker"].upper())

【问题讨论】:

    标签: python node.js django command-line-arguments


    【解决方案1】:

    你应该在你的选项变量上添加参数。例如,

    var options = {
        mode: 'text',
        scriptPath : path.join(__dirname, '/../engine/opencv-object-tracking/'),
        pythonPath : '/usr/bin/python',
        args: ['--video dashcam_boston.mp4 --tracker csrt']
        }
    

    另外,如果您需要执行后的输出,您可以添加pythonOptions: ['-u']参数。

    --编辑1--

    这很奇怪,但它与引号符号有关。如果您使用" 而不是',则效果很好。下面是在我的电脑上运行的代码

     var options = {
       scriptPath : path.join(__dirname, './'),
       pythonPath : '/usr/bin/python',
       args: ["--video", "dashcam_boston.mp4","--tracker", "csrt"],
       mode: 'text'
     }
    
     let pyshell = new PythonShell("./opencv_object_tracking.py", options);
    

    【讨论】:

    • Gurses:这实际上会引发错误:未捕获的 PythonShellError:用法:opencv_object_tracking.py [-h] [-v VIDEO] [-t TRACKER] opencv_object_tracking.py:错误:无法识别的参数:--video dashcam_boston.mp4 --tracker csrt
    • 抱歉错误,参数应该是逐个元素的。这里的例子args: ['--video', 'dashcam_boston.mp4',' --tracker', 'csrt']
    • 我对 python 脚本本身做了一个小改动,以确保只有视频是一个参数。然后当我执行调用 python 脚本的应用程序时——什么都没有发生。
    • 可以分享你的python argparse init吗?
    • 我用 %100 工作解决方案编辑了我的答案 :)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多