Я хотел бы запустить подпроцесс из Python. Внутри командная строка несколько Подкоманд с: обратными кавычкамиPython: Как использовать backticks в подпроцессе?
subprocess = subprocess.Popen(["echo", "COMMAND [`date +%%s`] SCHEDULE_HOST_DOWNTIME;%s;`date +%%s`;`date -d 'now + %d sec' +%%s`;1;;;%s;Downtime comment" % (hostname, 300, username)], stdout=subprocess.PIPE)
Хотя date
команды в обратных кавычках не выполняется. Стандартный вывод этой команды:
COMMAND [`date +%s`] SCHEDULE_HOST_DOWNTIME;example.com;`date +%s`;`date -d 'now + 300 sec' +%s`;1;;;my-username;Downtime comment
Я также попытался использовать $(date +%s)
вместо обратных кавычек и явно послал его, чтобы колотить через subprocess.Popen(["/bin/bash", "-c", "echo", "..."]
, с тем же результатом.
Как это можно решить? Я знаю, что я могу, конечно, использовать модуль Pythons datetime
в этом конкретном случае. Но я хочу знать, почему это не работает и как его решить, не разрывая команду. В то время как я здесь могу легко выполнить расчет временной метки в Python, в других случаях это может быть более сложным, когда мне придется запускать несколько подпроцессов, которые быстро становятся очень уродливыми.
не связаны: вы можете назвать 'Int (time.time())' в Python для эмуляции команды 'date +% s'. – jfs