Я выполняю сценарий Python с помощью команды PowerShell. Сценарий Python принимает строку, которая может содержать внутри себя специальные символы. Этот параметр передается из ansible конвейера. Ansible-хост — это машина Windows, поэтому нам нужно использовать модуль win_shell, который использует PowerShell. Таким образом, решение должно быть общим, которое можно применить к любой строке. Версия PowerShell, которую я использую, — PowerShell 5.1.
python.exe script.py --special_string the"str`in'g --otherparam value
Но это дает ошибки. (Просто «и» не пропускаются должным образом)
Основываясь на моих текущих выводах,
script.py: error: the following arguments are required: --otherparam
Как лучше всего это сделать?
если вы не опубликуете ошибку, мы не сможем узнать, связана ли проблема с Powershell или Python.
Backtick — это escape-символ в PowerShell, поскольку в путях очень часто используется обратная косая черта.


Используйте двойные кавычки, чтобы инкапсулировать строку и экранировать ее, а также обратную кавычку внутри с помощью обратной кавычки.
python.exe script.py --special_string "the`"str``in'g"
Да, это работает с точки зрения PowerShell. Но поскольку это передается в Python, он выдает ошибку с " внутри строки. Поэтому я сейчас тестирую и передачу \. Например, --special_string "the`"str``in'g"
возможно "the`"str``in'g" ? Но это проблема Python, а не Powershell.
Да, похоже, что "the`"str``in'g" работает без проблем. Но необходимо убедиться, что правильная строка передается правильно, игнорируя escape-символы.
Вы можете заставить PowerShell пропускать аргументы синтаксического анализа среды выполнения Python. Просто вставьте --% перед аргументами внешней команды python.exe:
python.exe --% script.py --special_string the"str`in'g --otherparam value
Он передаст аргументы как есть.
Спасибо! Это работает. И узнал токен остановки анализа (--%) не позволяет PowerShell интерпретировать строки как команды и выражения PowerShell. Это позволяет передавать эти строки в другие программы для интерпретации . Это устранило необходимость добавления escape-символов как в PowerShell, так и в Python. Теперь мне просто нужно добавить escape-символы Python, что намного проще.
«Но это выдает ошибки» какие ошибки вы получаете? Если вы запускаете скрипт Python с помощью python.exe, зачем вообще использовать powershell (в этом сценарии, вероятно, лучше использовать cmd)