Arhn - архитектура программирования

Как получить вывод из подпроцесса python

Я выполняю скрипт python из командной строки с помощью этого

python myscript.py

это мой скрипт

if item['image_urls']:
            for image_url in item['image_urls']:
            subprocess.call(['wget','-nH', image_url, '-P  images/'])

Теперь, когда я запускаю это на экране, я вижу вывод, подобный этому

HTTP request sent, awaiting response... 200 OK
Length: 4159 (4.1K) [image/png]

теперь я хочу, чтобы на терминале не было вывода.

я хочу получить вывод и найти расширение изображения оттуда, т.е. из [image/png] взять png и переименовать файл в something.png

Это возможно



Ответы:


1

Если все, что вам нужно, это загрузить что-то с помощью wget, почему бы не попробовать urllib.urlretrieve в стандартной библиотеке Python?

import os
import urllib
image_url = "https://www.google.com/images/srpr/logo3w.png"
image_filename = os.path.basename(image_url)
urllib.urlretrieve(image_url, image_filename)

EDIT: если изображения динамически перенаправляются сценарием, вы можете попробовать requests для обработки перенаправления.

import requests
r = requests.get(image_url)
# here r.url will return the redirected true image url
image_filename = os.path.basename(r.url)
f = open(image_filename, 'wb')
f.write(r.content)
f.close()

Я не тестировал код, так как не нашел подходящего тестового примера. Одним из больших преимуществ requests является то, что он также может обрабатывать авторизацию< /а>.

EDIT2: если изображение динамически обрабатывается скриптом, например gravatar. image, имя файла обычно можно найти в поле content-disposition заголовка ответа.

import urllib2
url = "http://www.gravatar.com/avatar/92fb4563ddc5ceeaa8b19b60a7a172f4"
req = urllib2.Request(url)
r = urllib2.urlopen(req)
# you can check the returned header and find where the filename is loacated
print r.headers.dict
s = r.headers.getheader('content-disposition')
# just parse the filename
filename = s[s.index('"')+1:s.rindex('"')]
f = open(filename, 'wb')
f.write(r.read())
f.close()

EDIT3: как предложил @Alex в комментарии, вам может потребоваться очистить закодированный filename в возвращаемом заголовке, я думаю, что просто получить базовое имя в порядке.

import os
# this will remove the dir path in the filename
# so that `../../../etc/passwd` will become `passwd`
filename = os.path.basename(filename)
28.12.2012
  • URL-адрес моего изображения выглядит примерно так image.php?u=155594&dateline=1182409179, и я не знаю, какое у него будет расширение. могу ли я найти это с помощью urllib 28.12.2012
  • Является ли URL-адрес перенаправлением на реальный URL-адрес изображения? Пожалуйста, проверьте мой обновленный ответ. 28.12.2012
  • Я получаю эту ошибку import: unable to open X server . я не знаю, есть ли перенаправление URL-адресов или нет, но я открываю эту ссылку в браузере, а затем вижу изображение там, например, http://www.example.com/image.php?u=155594&dateline=1182409179 показывает изображение в браузере без каких-либо изменений в URL-адресе 28.12.2012
  • Убедитесь, что filename не является вредоносным — используйте что-то вроде secure_filename(). предотвратить ../../../etc/passwd 28.12.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..