带有{}的python格式函数

时间:2019-04-23 13:50:09

标签: python format

有没有一种方法可以使用格式函数

获取此输出
name1 = 'test1'
name2 = 'test2'
ps_script = """powershell.exe Start-Job -ScriptBlock {D:\abc\abc\abc\abc.ps1 {} {} abc}""".format(name1,name2)
print(ps_script)

输出错误:

  

回溯(最近一次通话最后一次):文件“ main.py”,第6行,在          ps_script =“”“ powershell.exe启动作业-ScriptBlock {D:\ abc \ abc \ abc \ abc.ps1 {} {} abc}”“”。format(name1,name2)KeyError:   'D'

期望输出 powershell.exe开始作业-ScriptBlock {D:\ abc \ abc \ abc \ abc.ps1 test1 test2 abc}

3 个答案:

答案 0 :(得分:2)

您需要转义以获取文字字符:

name1 = 'test1'
name2 = 'test2'
ps_script = """powershell.exe Start-Job -ScriptBlock {{D:\\abc\\abc\\abc\\abc.ps1 {} {} abc}}""".format(name1,name2)
print(ps_script)

输出:

powershell.exe Start-Job -ScriptBlock {D:\abc\abc\abc\abc.ps1 test1 test2 abc}

答案 1 :(得分:0)

使用双{{来获取文字{

ps_script = """powershell.exe Start-Job -ScriptBlock {{D:\abc\abc\abc\abc.ps1 {} {} abc}}""".format(name1,name2)

答案 2 :(得分:0)

您可能希望考虑将subprocess.run()与参数列表一起使用(如注释中建议的chepner),而不是创建一个字符串来运行这样的命令。

也许是这样的(注意,我添加了一个r使其成为原始字符串;您要在输入反斜杠时执行此操作,以使它们不会被解释为转义符):

from subprocess import run

cmds_start = r'powershell.exe Start-Job -ScriptBlock {D:\abc\abc\abc\abc.ps1 abc}'.split()
names = 'test1 test2'.split()

cmds = cmds_start[:-1] + names + cmds_start[-1:]

run(cmds)  # use commands list to run, not string

# but can still view the script like:
print(" ".join(cmds))  # or:
print(*cmds, sep=" ")