функция формата python с {} - PullRequest
1 голос
/ 23 апреля 2019

Есть ли способ получить этот вывод, используя функцию форматирования

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

Ошибка вывода:

Traceback (последний вызов был последним): файл "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}

Ответы [ 3 ]

2 голосов
/ 23 апреля 2019

Вам нужно сбежать, чтобы получить буквальные символы:

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}
0 голосов
/ 23 апреля 2019

Вместо создания строки для запуска подобной команды, вы можете рассмотреть возможность использования subprocess.run() со списком аргументов (как предложил Чепнер в комментариях).

Возможно, вот так (обратите внимание, я добавил r, чтобы сделать его необработанной строкой; вы хотите сделать это при вводе обратной косой черты, чтобы они не интерпретировались как escape-символы):

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=" ")
0 голосов
/ 23 апреля 2019

Используйте двойной {{, чтобы получить литерал {

ps_script = """powershell.exe Start-Job -ScriptBlock {{D:\abc\abc\abc\abc.ps1 {} {} abc}}""".format(name1,name2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...