python格式函数与{}

问题描述 投票:1回答:3

有没有办法可以使用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 Start-Job -ScriptBlock {D:\ abc \ abc \ abc \ abc.ps1 {} {} abc }“”“。format(name1,name2)KeyError:'D'

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

python format
3个回答
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)

OUTPUT:

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

0
投票

使用双{{来获得文字{

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

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=" ")
© www.soinside.com 2019 - 2024. All rights reserved.