Подпроцесс popen + curl + двоичные данные

Следующее утверждение работает как ожидалось:

os.system("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30")

Но при попытке с subprocess.popen:

Popen(['curl','--data-binary','\@'+input_file_path, '-o', file_name,'localhost:30'], stdout=PIPE).communicate()[0]

Кажется, что Curl зависает (входит в бесконечный цикл), как если бы входной файл не был передан ему (что является обязательным для правильной работы localhost:30)...

Есть идеи?

3 ответа

Решение

Вы можете попробовать использовать оригинальную строку в subprocess.Popen с дополнительным ключевым аргументом Popen из shell=True:

subprocess.Popen("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30",
    stdout=subprocess.PIPE,
    shell=True)

Как насчет использования библиотеки вместо вызова системного curl?

Как насчет использования библиотеки запросов

Двоичные данные Python POST

Или еще один

Проверьте эту ссылку для случая двоичного файла (файла изображения) Как загрузить изображение с помощью запросов

Другие вопросы по тегам