我有一个命令行程序,我在 Python 脚本中使用它来负责将内部版本号标记到可执行文件上。
这是命令行程序:http ://www.elphin.com/downloads/stampver/
我的问题是程序在其参数之一中使用双引号(“),并且我用来调用该程序的 Python 子进程模块在执行程序时一直在双引号前加上反斜杠。这会导致程序失败语法不正确。
它期待一个类似的命令: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 会尝试转义反斜杠和双引号。
我应该使用 subprocess 模块以外的东西来完成此任务,还是 Python 中的所有这些类型的模块都遵循相同的转义字符规则?我可以做些什么来告诉 subprocess 去除转义字符或根本不添加它们?
编辑
这就是我从 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