import subprocess
profile_val = 'ishan'
cmd = 'instaloader --post-metadata-txt = "{likes} likes, {comments} comments, {caption}" --login=blabla_id --fast-update' + ' ' + profile_val)
subprocess.call(cmd.split())
Он не экранирует фигурные скобки в {likes} и рассматривает like как отдельную часть команды и терпит неудачу.
Нет, ваша проблема в том, что вы используете split()
для создания списка аргументов команды для выполнения. Вы также используете кавычки, которые представляют собой синтаксис оболочки, даже если вы не вызываете оболочку.
Просто используйте массив в первую очередь, чтобы не пришлось разбивать:
cmd = ('instaloader', '--post-metadata-txt = {likes} likes, {comments} comments, {caption}', '--login=blabla_id', '--fast-update', profile_val)
subprocess.call(cmd)
Stephane Chazelas дает лучшее решение, но если вы придется разделите команду, похожую на оболочку, вы можете использовать shlex.
import subprocess
import shlex
profile_val = 'ishan'
cmd = 'instaloader --post-metadata-txt = "{likes} likes, {comments} comments, {caption}" --login=blabla_id --fast-update "' + profile_val + '"'
subprocess.call(shlex.split(cmd))