Передача двойных кавычек команде Python с использованием модуля подпроцесса

У меня есть программа командной строки, которую я использую из сценария Python, чтобы позаботиться о том, чтобы штамповать номер сборки на исполняемый файл.

Это программа командной строки: http://www.elphin.com/downloads/stampver/

Моя проблема заключается в том, что программа принимает двойные кавычки (") в одном из своих аргументов, а модуль подпроцесса Python, который я использую для вызова этой программы, продолжает прикладывать обратную косую черту к двойным кавычкам при выполнении программы. Это приводит к сбою программы к некорректному синтаксису.

StampVer.exe -nopad -k -f"0.1.4491.0" <ExeFile>.exe команда вроде: StampVer.exe -nopad -k -f"0.1.4491.0" <ExeFile>.exe

И вместо этого выполняется Python: StampVer.exe -nopad -k -f\"0.1.4491.0\" <ExeFile>.exe

Я пробовал несколько вещей, которые я нашел здесь в StackOverflow для подобных проблем с звучанием, таких как маркировка строки как необработанная или добавление обратных косых черт перед кавычками в Python; что приводит к тройной обратной косой черты в командной строке вместо одной, потому что Python пытается избежать обратной косой черты, а также двойной кавычки.

Должен ли я использовать что-то другое, кроме модуля подпроцесса, для выполнения этого или все эти типы модулей в Python следуют тем же правилам для экранирования символов? Есть ли что-то, что я могу сделать, чтобы указать подпроцесс для удаления escape-символов или вообще не добавлять их?

РЕДАКТИРОВАТЬ

Вот как я вызываю подпроцесс из Python:

 def set_file_version(version_number, filepath): try: file_version_arg = '-f"{0}"'.format(version_number) cmd_line = ["StampVer.exe", "-nopad", "-k", file_version_arg, filepath] subprocess.check_output(cmd_line) except subprocess.CalledProcessError as e: if e.returncode == 1: pass else: raise e 

Затем StampVer возвращает это:

error: Invalid -f parameter. Try -f"0.0.0.0" Use StampVer -? for help

2 Solutions collect form web for “Передача двойных кавычек команде Python с использованием модуля подпроцесса”

попробуйте этот сценарий sub.py:

 #! /usr/bin/python import sys from subprocess import check_output if len(sys.argv) > 1: print sys.argv else: print check_output((sys.argv[0], '-f"1234"')) 

затем запустите его:

 ./sub.py 

он возвращает то, что мы дали:

 ['./sub.py', '-f"1234"'] 

Поэтому я думаю, что check_output работает нормально, проблема может возникнуть в результате того, как параметр StampVer.exe обрабатывает параметр, вы можете попробовать

 file_version_arg = '-f{0}'.format(version_number) 

Мое решение закончилось тем, что я был отцом. Несмотря на то, что документация для StampVer, показывающая формат выше для номера версии во всех примерах, оказывается, вы можете просто оставить кавычки все вместе и даже коснуться ее из -f, и она все равно будет принята.

Я собираюсь назвать этот мой ответ, но я все еще думаю, что возможность передавать кавычки через подпроцесс – это стоящая проблема, чтобы понять. Если у кого-то есть ответ, который действительно решит исходную проблему, отправьте его, и я помечаю его.

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