Выполнение многострочных команд Python в одну строку
Быстрый ответ
Чтобы выполнить многострочный код Python в командной строке, вы можете использовать точку с запятой ;
для разделения инструкций:
for i in range(3): print(f'Число: {i}, Квадрат: {i**2}'); # Точка с запятой — наш надёжный помощник 😉
Для запуска более длинных скриптов используйте функцию exec()
с многострочным строковым литералом:
python -c "exec(\"\"\"for i in range(3):\n print(f'Число: {i}, Квадрат: {i**2}')\"\"\")"
Таким образом, для коротких команд подходит точка с запятой, в то время как exec()
с многострочными литералами эффективно справится с более сложными задачами.
Стратегии усложнения однострочных команд
1. Улучшение возможностей с bash
Примените ANSI C-строки в кавычках ($'...'
) для удобного включения переводов строк и разделения инструкций Python:
python -c $'for i in range(3):\n print(f"Число: {i}, Квадрат: {i**2}")' # На сей раз точка с запятой может отдохнуть 🙌
Рассмотрите применение heredoc для больших скриптов, не забывая о его особенностях:
python <<'EOF'
import sys
for i in range(int(sys.argv[1])):
print(f'Счет: {i}') # EOF — это не конец света!
EOF
Не забывайте обертывать 'EOF' в кавычки, чтобы bash не разворачивал переменные внутри блока heredoc.
2. Интерактивность
Используйте input()
для интерактивности или sys.argv
для чтения параметров из командной строки:
python -c "import sys; print(f'Привет, {sys.argv[1]}!')" ВашеИмя # Мы догадались с вашим именем? 🤔
3. Соблюдение POSIX
Если требуется совместимость с POSIX, printf для подстановки или передача данных в stdin Python станут вашим выбором:
printf "print('Занимательное путешествие в POSIX')" | python # 🚀 Все идет по плану...
4. Избыточная сложность — противник ясности
Не злоупотребляйте сложностью. Порой целесообразнее создать небольшой скрипт .py
:
python -c "print(*(f'Счетчик: {i}' for i in range(5)), sep='\n')" # Гибкость числового потока
Для оптимизации вывода можно использовать sys.stdout.write
вместо print, а для компактных вычислений заходят map()
и lambda
:
python -c "import sys; map(lambda x: sys.stdout.write(f'{x}\n'), range(5))"
Но имейте в виду, что в мире однострочных команд главным приоритетом остаётся читаемость. Не жертвуйте ею в угоду краткости!
Визуализация
Считайте командную строку лифтом (🛗), который перевозит инструкции этаж за этажом до момента их выполнения:
Этаж 1: `import this`
Этаж 2: `for i in range(10):`
Этаж 3: `print(i, end=" ")`
Этаж 4: `# Завершаем`
Весь маршрут выполняется за одну поездку
python -c "import this; for i in range(10): print(i, end=' '); print('# Завершаем')"
```
Подводные камни и хитрости
Однострочники тоже могут быть губительными — вот несколько распространенных проблем, которые следует учитывать:
1. Проблемы с отступами и символами табуляции
В Python каждая ошибка в отступах может вызвать IndentationError. Постарайтесь избегать символов табуляции в командной строке.
2. Ловушки heredoc
Убедитесь, что выбранный вами маркер heredoc не встречается в тексте вашего кода, и правильно экранируйте кавычки внутри него. Для полноценной работы с heredoc изучите подробное руководство по bash.