Я пытаюсь вызвать скрипт .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.