Вызов сценария .ps1 в Linux Powershell из маршрута Flask в Python - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь вызвать скрипт .ps1 в Powershell для Linux, передав переменную и вызвав ее в ответ на веб-вызов API Flask / Python.

Все файлы находятся в одном каталоге в этом примере - в идеале сценарий .ps1 и другие соответствующие файлы для действия, которое необходимо выполнить, должны находиться в другом каталоге, но для тестирования все они находятся вГлавный каталог моего венва.

Если я запускаю следующий код вручную, через my_venv >> python script.py

# this is script.py
import subprocess

arg1 = 'xyz'
arg2 = 'abc'

subprocess.run(['pwsh', '.\example.ps1', arg1, arg2])

Он будет работать правильно.Powershell запустится, и действия в сценарии example.ps1 будут выполнены.Однако, если я добавлю тот же код Python в маршрут приложения Flask, чтобы он мог быть вызван запросом API следующим образом:

from flask import Flask, request
import subprocess
app = Flask(__name__)
app.debug = True

# example route
@app.route('/example/', methods=['GET'])
def example():

    var1 = request.args.get('var1')
    arg1 = var1
    arg2 = 'abc'

    subprocess.run(['pwsh', '.\example.ps1', arg1, arg2])

    return ('success', 200)

Он ничего не делает.Отладка Flask дает мне ошибку:

Exception: builtins.FileNotFoundError: [Errno 2] No such file or directory: 'pwsh'

, которая заставляет меня думать, что это не поиск двоичного файла для pwsh, но я не знаю, как это исправить в этой ситуации.В Windows вы бы указали путь к исполняемому файлу powershell.exe в вашей команде, но здесь это явно не так.

Одна нота - это переменная выше - я пробовал без нее, просто позволяязначение, передаваемое var1 через GET с последующим игнорированием и жестким кодированием arg1 для проверки, не имеет значения.Реальному коду нужна переменная.

Любая очевидная глупость, которую я здесь делаю неправильно?Этот вопрос, похоже, не задавался для Linux, хотя есть некоторые похожие вопросы по Windows.

1 Ответ

0 голосов
/ 22 мая 2018

В Windows обычно рекомендуется полностью указывать пути к исполняемым файлам и аргументам, если вы не уверены в переменных среды.Вы можете сделать это в своем примере, используя

subprocess.run(['/usr/bin/pwsh', '.\example.ps1', arg1, arg2])

, чтобы полностью определить путь к исполняемому файлу pwsh в Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...