Проблема подпроцесса Python с амперсандами

В настоящее время у меня серьезная проблема с скриптом python. Скрипт выполняет произвольные команды с помощью обработчика, чтобы преобразовать неверные отчеты об ошибках в правильные отчеты об ошибках.

Проблема, с которой я столкнулась, – заставить скрипт корректно работать с окнами с командой, содержащей амперсанды на своем пути. Я попытался процитировать команду, избегая амперсанда с помощью ^, и ни одна из них не работает. У меня теперь нет идей. Какие-либо предложения?

Чтобы уточнить текущие ответы:

  1. Я использую модуль подпроцесса
  2. Я передаю командную строку + аргументы в виде списка
  3. Проблема заключается в пути к самой команде, а не к аргументам
  4. Я пробовал процитировать команду. Это вызывает [Error 123] The filename, directory name, or volume label syntax is incorrect ошибкой
  5. Я не использую аргумент оболочки (так что shell=false )
  6. В случае, если это имеет значение, я хватаю трубку для stderr для ее обработки, но игнорирую stdout и stdin
  7. Он используется только для Windows в настоящее время и работает так, как ожидалось, во всех других случаях, которые я тестировал до сих пор.
  8. Сбой команды:

p = subprocess.Popen (prog, stderr = subprocess.PIPE, bufsize = -1)

когда первый элемент списка «prog» содержит любые амперсанды. Цитирование этой первой строки не работает.

6 Solutions collect form web for “Проблема подпроцесса Python с амперсандами”

Убедитесь, что вы используете списки и нет расширения оболочки:

 subprocess.Popen(['command', 'argument1', 'argument2'], shell=False) 

Для правильного ответа потребуется больше информации. Что вы на самом деле делаете? Как это происходит? Используете ли вы модуль подпроцесса? Вы передаете список аргументов и shell = False (или без аргумента оболочки) или вы действительно вызываете оболочку?

Попробуйте указать аргумент, содержащий &

 wget "http://foo.com/?bar=baz&baz=bar" 

Обычно, что нужно сделать в оболочке Linux

«ускользнуть от амперсанда с помощью ^»

Вы уверены, что ^ является escape-символом для Windows? Разве вы не используете?

Чтобы ответить на мой вопрос:

Цитирование фактической команды при передаче параметров в виде списка не работает правильно (команда – это первый элемент списка), поэтому для решения проблемы я перевернул список в строку, разделенную пробелами, и передал ее в подпроцесс.

По-прежнему приветствуются лучшие решения.

Я пробую ситуацию следующим образом:

 exe = 'C:/Program Files (x86)/VideoLAN/VLC/VLC.exe' url = 'http://translate.google.com/translate_tts?tl=en&q=hello+world' subprocess.Popen([exe, url.replace("&","^&")],shell=True) 

Это работает.

  • Экспорт среды conda с локальными установками pip
  • Как установить пакет оптимизации pyOpt в Python на windows
  • Отсутствующие файлы для библиотеки `magic` в Windows
  • Определение версий Windows
  • Исправить синтаксис mt.exe для разрешения проблем импорта pyodbc
  • Смешивание read () и write () в файлах Python в Windows
  • PySerial не разговаривает с Arduino
  • В CMD «python» запускает Python 3.3, «py» запускает Python 2.7, как мне это изменить?
  • Как проверить, является ли ОС Vista в Python?
  • Как заставить CMake выполнить некоторый скрипт после того, как он создает визуальное студийное решение
  • почему я получаю ошибку IOError: (9, «Bad file descriptor») при создании заявлений на печать?
  •  
    Interesting Posts for Van-Lav

    Объединение вложенных элементов списка на основе повторяющегося значения

    В чем разница между «()» и «» при генерации в Python?

    Как я могу установить прокси с аутентификацией в selenium chrome веб-драйвер, используя python

    Встроенное решение для Django Admin, где Admin содержит ForeignKey для другой модели

    Проблемы с установкой MySQL-python-1.2.3c1 на Mac Snow Leopard

    Что делает python sys.intern, и когда его следует использовать?

    Не удается найти элемент в селене по имени, имени или ссылке или WebDriverWait (). Такое исключение ошибки не возникает каждый раз

    Python-просит как вызвать функцию js для вычисления некоторого значения перед публикацией?

    Создать массив numpy из матрицы, объявленной внутри .m matlab file

    Поверните линию вокруг центральной точки, задав две вершины

    Массив массивных массивов числовых массивов

    Как подстроить строку?

    Как напрямую публиковать только дочерние элементы моего типа контейнера в Plone?

    "Необязательная функция не реализована (106) (SQLBindParameter)" ошибка с pyodbc

    Ломать длинную строку без пробелов в Python

    Python - лучший язык программирования в мире.