Как добавить параметры в команду Python Shell? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть приложение Django + Python. У меня есть сценарий python, который принимает требования в качестве параметров командной строки.

Проблема для меня заключается в том, что при попытке ввести аргументы командной строки сценарий не выполняется. Когда я убираю аргументы командной строки, все работает нормально. Мне нужны эти аргументы командной строки.

Я использую node JS с Python Shell для выполнения сценария python при нажатии кнопки на главной странице django HTML.

Вот мой код:

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())

1 Ответ

1 голос
/ 25 февраля 2020

вы должны добавить аргументы в вашу переменную options. Например,

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'], если вам требуются выходные данные после выполнения.

- Edit1 -

Странно, но это про символ кавычки. Если вы используете " вместо ', это работает очень хорошо. Вот код ниже, который работает на моем компьютере

 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...