У меня есть скрипт Python, который загружает / выгружает файлы на / с FTP-сервера в фоновом режиме.
run = 1 while run == 1: get_from_ftp(server, login, password)
Я хочу запустить и остановить мой скрипт на Python с помощью командной строки
myprogram.py start и myprogram.py stop
Идея заключается в следующем, когда я запускаю команду myprogram.py stop переменная run должна получить значение 0, а цикл ( while ) должен загрузить / загрузить последний файл и остановиться.
Пожалуйста, предложите, как я могу это понять.
Пожалуйста, не предлагайте использовать kill, ps и ctrl + c
Pavel Mihaylyan 5 Окт 2018 в 15:11
3 ответа
Лучший ответ
Поскольку вы хотите иметь возможность управлять через командную строку, один из способов сделать это — использовать временный файл «flag», который будет создан myprogram.py start и удален myprogram.py stop . Ключ в том, что, пока файл существует, myprogram.py продолжит выполнение цикла.
import os import sys import time FLAGFILENAME = ‘startstop.file’ def set_file_flag(startorstop): # In this case I am using a simple file, but the flag could be # anything else: an entry in a database, a specific time. if startorstop: with open(FLAGFILENAME, «w») as f: f.write(‘run’) else: if os.path.isfile(FLAGFILENAME): os.unlink(FLAGFILENAME) def is_flag_set(): return os.path.isfile(FLAGFILENAME) def get_from_ftp(server, login, password): print(«Still running. «) time.sleep(1) def main(): if len(sys.argv) < 2: print «Usage: start|stop» sys.exit() start_stop = sys.argv[1] if start_stop == ‘start’: print «Starting» set_file_flag(True) if start_stop == ‘stop’: print «Stopping» set_file_flag(False) server, login, password = ‘a’, ‘b’, ‘c’ while is_flag_set(): get_from_ftp(server, login, password) print «Stopped» if __name__ == ‘__main__’: main()
Как вы можете себе представить, флаг может быть чем-то еще. Это очень просто, и если вы хотите, чтобы было запущено более двух экземпляров, вы должны как минимум по-разному называть файлы для каждого экземпляра (например, с параметром CLI), чтобы вы могли выборочно остановить каждый экземпляр.
КОМАНДНАЯ СТРОКА ЧЕРЕЗ PYTHON | OS
sal 5 Окт 2018 в 18:29
while True: run= int(input(«press 1 to run/ 0 to stop: «)) if run == 1: get_from_ftp(server, login, password) elif run ==0: # what you want to do
Если я понимаю ваш вопрос, может быть что-то подобное
Источник: question-it.com
Как завершить python скрипт в консоли командой?

- Ubuntu
- +2 ещё
Как решить ошибку загрузки информационной базы. В информационную базу загружены не все данные?
- 1 подписчик
- час назад
- 24 просмотра

Уроки Python Как сделать задержку времени
- Python
- +1 ещё
Как вернуть значения из синхронного колбека в corotine несколько раз?
- 2 подписчика
- час назад
- 42 просмотра

- Python
- +1 ещё
Использую opentele для конвертации tdata в telethon.session. На tdesk.ToTelethon зависает, что делать?
- 1 подписчик
- вчера
- 45 просмотров

- Python
- +2 ещё
Почему метод Storage.set(vk_api) возвращает None?
- 1 подписчик
- вчера
- 48 просмотров

- Python
Как мне исправить ошибку KeyError: 18?
- 1 подписчик
- вчера
- 91 просмотр

- Python
- +1 ещё
Можно объединить юзер бота с обычным?
- нет подписчиков
- вчера
- 68 просмотров

- Python
Получение ошибки при запросе на биржу?
- 1 подписчик
- вчера
- 62 просмотра

- Python
Как исправить ошибку cannot perform operation: another operation is in progress?
- 1 подписчик
- 08 июл.
- 96 просмотров

- Python
Как сделать так чтобы в конце кода когда человек нажимал Y код запускался заново?
- 1 подписчик
- 08 июл.
- 86 просмотров

- Python
Почему ModuleNotFoundError: No module named ‘app’?
- 1 подписчик
- 08 июл.
- 46 просмотров
от 2 000 до 2 500 $
от 110 000 до 350 000 ₽
Greenway • Новосибирск
от 150 000 до 200 000 ₽
10 июл. 2023, в 16:55
500 руб./в час
10 июл. 2023, в 16:45
5000 руб./за проект
10 июл. 2023, в 16:42
1000 руб./за проект
Минуточку внимания
Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями
- Как работать с числами разных типов в формах?
- 2 подписчика
- 0 ответов
- 2 подписчика
- 1 ответ
- 2 подписчика
- 2 ответа
- 5 подписчиков
- 0 ответов
- 2 подписчика
- 6 ответов
- 2 подписчика
- 0 ответов
- 2 подписчика
- 5 ответов
- 2 подписчика
- 5 ответов
- 2 подписчика
- 0 ответов
- 2 подписчика
- 4 ответа
Источник: qna.habr.com
Как остановить скрипт Python с помощью командной строки
У меня есть скрипт python, который загружает / выгружает файлы на / с FTP-сервера в фоновом режиме.
run = 1 while run == 1: get_from_ftp(server, login, password)
Я хочу запустить и остановить свой скрипт python с помощью командной строки
myprogram.py start и myprogram.py stop
Идея заключается в следующем: когда я запускаю команду myprogram.py stop , переменная run должна получить значение 0, а цикл ( while ) должен загрузить / загрузить последний файл и остановиться.
Подскажите, пожалуйста, как мне это реализовать.
Пожалуйста, не предлагайте использовать kill, ps и ctrl + c
Комментарии (3)
Лучшим решением, вероятно, является создание службы системного уровня для вашей программы. Какую операционную систему ты используешь?
Вы можете генерировать сигналы из программы Python, и они не обязательно должны быть SIGKILL, а должны быть чем-то вроде SIGINT (Ctrl + C), которые могут быть захвачены для аккуратного закрытия. PID может быть записан в файл оригиналом, чтобы избежать использования ps . Я не понимаю, почему вы не хотите использовать kill .
Я не хочу использовать kill, потому что боюсь, что при загрузке большого файла загрузка прервется. Но если я перестану зацикливаться, файл будет загружен, а затем скрипт закроется.
05.10.2018 14:11
Оператор pass в Python — это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Python — самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science.
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
Перейти к ответу Данный вопрос помечен как решенный
Ответы 3
while True: run= int(input(«press 1 to run/ 0 to stop: «)) if run == 1: get_from_ftp(server, login, password) elif run ==0: # what you want to do
Если я понимаю, ваш вопрос может быть примерно таким
05.10.2018 14:14
Вы можете использовать ниже —
import sys import os text_file = open(‘Output.txt’, ‘w’) text_file.write(sys.argv[1]) text_file.close() if sys.argv[1] == «stop»: sys.exit(0) run = 1 while run == 1: # Your code fw = open(‘Output.txt’, ‘r’) linesw = fw.read().replace(‘n’, ») fw.close() if linesw == «stop»: os.remove(‘Output.txt’) break sys.exit(0)
Я использую Python 3.7.0. Запускаем как python myprogram.py start и python myprogram.py stop .
05.10.2018 16:26
Ответ принят как подходящий
Поскольку вы хотите иметь возможность управлять через командную строку, один из способов сделать это — использовать временный файл «флагов», который будет создан myprogram.py start и удален myprogram.py stop . Ключ в том, что пока файл существует, myprogram.py будет продолжать выполнение цикла.
import os import sys import time FLAGFILENAME = ‘startstop.file’ def set_file_flag(startorstop): # In this case I am using a simple file, but the flag could be # anything else: an entry in a database, a specific time. if startorstop: with open(FLAGFILENAME, «w») as f: f.write(‘run’) else: if os.path.isfile(FLAGFILENAME): os.unlink(FLAGFILENAME) def is_flag_set(): return os.path.isfile(FLAGFILENAME) def get_from_ftp(server, login, password): print(«Still running. «) time.sleep(1) def main(): if len(sys.argv) < 2: print «Usage: start|stop» sys.exit() start_stop = sys.argv[1] if start_stop == ‘start’: print «Starting» set_file_flag(True) if start_stop == ‘stop’: print «Stopping» set_file_flag(False) server, login, password = ‘a’, ‘b’, ‘c’ while is_flag_set(): get_from_ftp(server, login, password) print «Stopped» if __name__ == ‘__main__’: main()
Как вы понимаете, флаг может быть чем угодно. Это очень просто, и если вы хотите, чтобы запущено более двух экземпляров, вы должны, по крайней мере, называть файлы по-разному для каждого экземпляра (например, с помощью параметра CLI), чтобы вы могли выборочно останавливать каждый экземпляр.
Источник: reddeveloper.ru