Я думаю, что приседания и обратные расширения хорошие упражнения, но они не полностью охватывают все направления тяги делать. Например, становая тяга, вы не просто работать нижняя часть спины и ноги. Вы работаете латов, ловушки, верхняя часть спины, не говоря уже о предплечьях. И при этом они не обязательно должны быть в центре внимания становая тяга, они все же способствуют более полностью отработанных тела. И заменить его, мне пришлось бы бросить в много упражнений изоляции. Я люблю, что тяга охватывает слишком много, и дает вам столько бесплатно. Не используя учетную запись Gmail, заданный вам? Я действительно не вижу, как это картах тех, на iOS парадигм в Google, как проблемы. Я имею в виду, Gmail не *имеют* папки ярлыки, вот что я ожидаю от почтового клиента делать, когда я назначить для папки. Спасибо: я пробовал команды, но после них мне было предложено с: `Е37: нет записи с последнего изменения (добавить ! чтобы переопределить)`. Я уже ничего не спасет.

Я хотел использовать FTP-сервер для обмена файлами от моего Mac.

Самое простое решение-запустить этот скрипт на Python, в каталоге я хочу поделиться/загрузки из/в:

#!/usr/Бен/ОКР питон3

"""Простой HTTP-сервер с загрузки.

Этот модуль основан на BaseHTTPServer путем внедрения стандарта вам
и голова запросов в довольно простым способом.

см.: https://gist.github.com/UniIsland/3346170
"""


__версия__ = "0.1"
__все__ = ["SimpleHTTPRequestHandler"]
__автор__ = ""
__дом_страница__ = ""

импорт ОС
импорт posixpath
импорт http.сервер
импорт urllib.запрос, urllib.разобрать, urllib.ошибка
импорт цги
shutil импорт 
импорт типов MIME
импорт заново
от импортных Ио BytesIO


SimpleHTTPRequestHandler класс(по протоколу HTTP.сервер.BaseHTTPRequestHandler):

 """Простые http-обработчик запроса с GET/начальник/команды.

 Это файлы из текущего каталога и всех его
 поддиректории. Тип MIME для файлов определяется
 вызова .guess_type() метод. И получаете файл загружен
 клиентом.

 Получение/руководитель/POST запросы идентичны за исключением того, что глава
 запрос опускает фактическое содержимое файла.

"""

 server_version = "SimpleHTTPWithUpload/" + __версия__

 деф do_GET(самовыдвижение):
 """Служить вам запросу."""
 Ф = собственн.send_head()
 если F:
 самовывоз.команду copyfile(Ф, самовывоз.wfile)
Ф.закрыть()

 деф do_HEAD(самовыдвижение):
 """Обслужить запрос Head."""
 Ф = собственн.send_head()
 если F:
Ф.закрыть()

 деф do_POST(самовыдвижение):
 """Обслужить запрос POST."""
 Р информация = собственн.deal_post_data()
 печати((Р Инфо "по: ", себе.client_address))
 Ф = BytesIO()
 Ф.напишите(б'<!Элемент DOCTYPE в HTML общественности "-//W3C по//отд в HTML 3.2 окончательной//ванной">')
 Ф.пишут(в"тега<html>\п<Название>загрузить результат страницы</title>\п")
 Ф.напишите(б"<тело>\Н<Н2>загрузить страница результатов</Н2>\п")
Ф.пишут(в"<ч>\п")
 если R:
Ф.напишите(Б"на<Strong>успех:</Strong>в")
другое:
Ф.напишите(Б"на<Strong>ошибка:</Strong>в")
Ф.писать(информация.кодирование())
 Ф.писать(("<БР><а href=\"%s\">назад</A> с" % самостоятельно.заголовки['Заголовок']).кодирование())
 Ф.пишут(в"<ч><маленький>powerd по: bones7456")
Ф.напишите(б".</маленький></тело>\п</HTML>и\п")
 длина = Ф.сказать()
Ф.искать(0)
самовывоз.send_response(200)
 самовывоз.send_header("содержимое-тип", "текст/HTML")
 самовывоз.send_header("контент-длина", ул.(длина))
самовывоз.end_headers()
 если F:
 самовывоз.команду copyfile(Ф, самовывоз.wfile)
Ф.закрыть()

 деф deal_post_data(самовыдвижение):
 uploaded_files = []
 content_type = собственн.заголовки['тип содержимого']
 если не content_type:
 возврат (ложь, "контент-тип заголовка не содержит границ")
 граница = content_type.сплит("=")[1].кодирование()
 remainbytes = инт(самовыдвижение.заголовки['контент-длина'])
 строка = собственн.rfile.с readline()
 remainbytes -= лен(линия)
 если бы не граница в строке:
 возврат (ложь, "содержание не начинается с границы")
 при remainbytes > 0:
 строка = собственн.rfile.с readline()
 remainbytes -= лен(линия)
 FН = ре.метод findAll('Content-диспозиция Р.*имя="файл"; имяфайла="(.*)"', линии.декодировать())
 если не ФН:
 возврат (ложь, "не могу найти имя файла...")
 путь = собственн.translate_path(самовыдвижение.путь)
 FН = ОС.путь.присоединиться(путь, ФН[0])
 строка = собственн.rfile.с readline()
 remainbytes -= лен(линия)
 строка = собственн.rfile.с readline()
 remainbytes -= лен(линия)
попробуйте:
 из = открыть(ФН 'ВБ')
 кроме IOError:
 возврат (ложь, "не могу создать файл для записи, у вас есть разрешение на запись?")
другое:
 с: 
 фильтр preline = собственн.rfile.с readline()
 remainbytes -= лен(фильтр preline)
 при remainbytes > 0:
 строка = собственн.rfile.с readline()
 remainbytes -= лен(линия)
 если граница по линии:
 фильтр preline = фильтр preline[0:-1]
 если фильтр preline.метода endswith(б'\р'):
 фильтр preline = фильтр preline[0:-1]
из.написать(фильтр preline)
uploaded_files.добавить(ФН)
перерыв
другое:
из.написать(фильтр preline)
 фильтр preline = строка
 возвращение (правда, файла ""%s " не загружать успех!" % ",".присоединиться(uploaded_files))

 деф send_head(самовыдвижение):
 """Общий код для получения и руководитель команды.

 Это отправляет код ответа и заголовки MIME.

 Возвращаемым значением является объект-файл (который должен быть скопирован
 в выходной_файл вызывающим, если команда была голова,
 и должны быть закрыты звонящего при любых обстоятельствах), или
 Нет, в этом случае абонент имеет ничего общего.

"""
 путь = собственн.translate_path(самовыдвижение.путь)
 Ф = нет
 если ОС.путь.isdir(путь):
 если не самоназвание.путь.метода endswith('/'):
 # перенаправление браузера - делаю в основном то, что Апач делает
самовывоз.send_response(301)
 самовывоз.send_header("расположение", самовыдвижение.путь + "/")
самовывоз.end_headers()
 возврата нет
 для индекса в "index.html", "index.htm":
 индекс = ОС.путь.присоединиться(путь, индекс)
 если ОС.путь.существует(индекс):
 путь = индекс
перерыв
другое:
 вернуться самостоятельно.list_directory(путь)
 ctype для = себя.guess_type(путь)
попробуйте:
 # Всегда читать в бинарном режиме. Открытие файлов в текстовом режиме может привести
 # перевод строки перевод, делая фактический размер содержимого
 # передаваемых *меньше*, чем контент-длина!
 Ф = открыть(путь, "РБ")
 кроме IOError:
 самовывоз.файл send_error(404, "не нашли")
 возврата нет
самовывоз.send_response(200)
 самовывоз.send_header("содержимое-тип", ctype для)
 ФС = ОС.функцию fstat(Ф.fileno())
 самовывоз.send_header("контент-длина", ул.(ФС[6]))
 самовывоз.send_header("последнего изменения", самовыдвижение.date_time_string(ПС.тип доступа))
самовывоз.end_headers()
 возвращение F

 деф list_directory(самовыдвижение, путь):
 """Помощник, чтобы произвести Каталоге (отсутствует index.html).

 Возвращаемое значение-это либо объектный файл, или нет (с указанием
 ошибка). В любом случае, заголовки отправляются, делая
 интерфейс такой же, как для send_head().

"""
попробуйте:
 список = ОС.listdir(путь)
 за исключением ОС.ошибка:
 самовывоз.send_error(404, "без разрешения на список справочника")
 возврата нет
 список.сортировки(ключ=лямда-ответ:.Нижний())
 Ф = BytesIO()
 displaypath = цги.побег(urllib.разобрать.конец цитаты(самовыдвижение.путь))
 Ф.напишите(б'<!Элемент DOCTYPE в HTML общественности "-//W3C по//отд в HTML 3.2 окончательной//ванной">')
 Ф.писать(("<HTML-код>\п<Название>каталогов для %S</название>\П" % displaypath).кодирование())
 Ф.писать(("<тело>\Н<Н2>каталогов для %S</Н2>\п" % displaypath).кодирование())
Ф.пишут(в"<ч>\п")
 Ф.напишите(б"тега<form ENCTYPE=\"multipart/данные формы\" Способ=\"пост\">")
 Ф.пишут(в"<имя входного=\"файл\" тип=\"файл\" несколько/>")
 Ф.напишите(б"<тип входного=\"отправить\" значение=\"загрузить\"/></форма>\П")
Ф.пишут(в"<ч>\п<ул>\п")
 имя в списке:
 полное имя = ОС.путь.присоединиться(путь, имя)
 параметр DisplayName = имя_ссылки = имя
 # Добавление / для каталогов или @ для символических ссылок
 если ОС.путь.isdir(полное имя):
 отображаемое имя = имя + "/"
 имя_ссылки = имя + "/"
 если ОС.путь.islink(полное имя):
 отображаемое имя = имя + "@"
 # Примечание: ссылку на каталог дисплеи с @ и связей с /
 Ф.писать(('<ли><а href="на%S">%х</а>\п
 % (urllib.разобрать.цитата(имя_ссылки), цги.побег(отображаемое имя))).кодирование())
Ф.напишите(б"</ул>\п<ч>\п</тело>\п</HTML>и\п")
 длина = Ф.сказать()
Ф.искать(0)
самовывоз.send_response(200)
 самовывоз.send_header("содержимое-тип", "текст/HTML")
 самовывоз.send_header("контент-длина", ул.(длина))
самовывоз.end_headers()
 возвращение F

 деф translate_path(самовыдвижение, путь):
 """Переводить /-разделенный путь к локальной синтаксис именем.

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

"""
 # отказаться от параметров запроса 
 путь = путь.сплит('?',1)[0]
 путь = путь.сплит('#',1)[0]
 путь = posixpath.normpath(urllib.разобрать.конец цитаты(путь))
 слова = путь.сплит('/')
 слова = [АF АF за словами, если АF]
 путь = ОС.функция getcwd()
 для Слова в слова:
 диск Word = ОС.путь.splitdrive(слово)
 глава, слово = ОС.путь.сплит(слово)
 если слово в (ОС.curdir, ОС.pardir): далее
 путь = ОС.путь.присоединиться(путь, слова)
 обратный путь

 деф команду copyfile(самовыдвижение, источник, выходной_файл):
 """Скопируйте все данные между двумя объектами файл.

 Исходный аргумент-это объект открыть файл для чтения
 (или что-нибудь с прочитать() метод) и пунктом
 аргумент-это объект открыть файл для записи (или
 ничего с write() метод).

 Единственная причина для того, чтобы переопределить это будет изменение
 размер блока или, возможно, заменить переводы строк на символы не экранируются
 -- однако, обратите внимание, что это по умолчанию сервер использует этот
 чтобы скопировать двоичные данные, а также.

"""
 shutil.copyfileobj(источник, выходной_файл)

 деф guess_type(самовыдвижение, путь):
 """Угадай тип файла.

 Аргумент-это путь (имя файла).

 Возвращаемое значение представляет собой строку вида тип/подтип,
 пригодные для контент-тип заголовка MIME.

 Реализация по умолчанию выглядит расширение файла 
 в собственной таблице.extensions_map, используя приложения/октет-поток
 по умолчанию, однако это будет допустимо (если
 медленно) заглянуть внутрь данных, чтобы сделать лучшее предположение.

"""

 основание, ВН = posixpath.splitext(путь)
 если доб в себя.extensions_map:
 вернуться самостоятельно.extensions_map[доб]
 вн = вн.ниже()
 если доб в себя.extensions_map:
 вернуться самостоятельно.extensions_map[доб]
другое:
 вернуться самостоятельно.extensions_map["]

 если не MIME-типов.объединены:
 MIME-типов.метод init() # попробуйте прочитать система мим.типы
 extensions_map = MIME-типов.types_map.копия()
extensions_map.обновление({
 ": 'приложения/октет-поток', # по умолчанию
 '.пы': 'текст/равнина',
 '.с': 'текст/равнина',
 '.ч': 'текст/равнина',
})


деф тест(HandlerClass = SimpleHTTPRequestHandler,
 Классу "serverclass" = НТТР.сервер.HTTP-сервера):
 протоколу HTTP.сервер.тест(HandlerClass, классу "serverclass")

если __имя__ == '__главный__':
тест()

Он создает веб-страницу на порт 8000, который я могу загрузить файлы (они бросили в каталог запуска скрипта из), и скачать файлы (этот каталог).