Переместить код Python в фоновый режим после выполнения его части

У меня есть код Python, который имеет некоторую часть, которая должна быть запущена на переднем плане, так как он сообщает, было ли соединение с сокетом правильным или нет. Теперь после выполнения этой части вывод записывается в файл.

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

Я знаю, используя screen это вариант, но есть ли другой способ сделать это. Поскольку после запуска детали на переднем плане в терминале не будет отображаться никакого вывода, я не хочу запускать экран без необходимости.

2 ответа

Решение

В python вы можете отсоединиться от текущего терминала, обратите внимание, что это будет работать только в UNIX-подобных системах:

# Foreground stuff
value = raw_input("Please enter a value: ")

import os

pid = os.fork()
if pid == 0:
    # Child
    os.setsid()  # This creates a new session
    print "In background:", os.getpid()

    # Fun stuff to run in background

else:
    # Parent
    print "In foreground:", os.getpid()
    exit()

В Bash вы можете делать вещи только в интерактивном режиме. Когда вы хотите поместить процесс Python в фоновый режим, используйте CTRL+Z (ведущий $ является соглашением для универсального приглашения bash):

$ python gash.py
Please enter a value: jjj
^Z
[1]+  Stopped                 python gash.py
$ bg
[1]+ python gash.py &
$ jobs
[1]+  Running                 python gash.py &

Обратите внимание, что с помощью setsid() в коде Python не будет отображать процесс в jobs, поскольку фоновое управление заданиями выполняется оболочкой, а не python.

Если у вас есть #!/ Bin/env python, и его разрешения установлены правильно, вы можете попробовать что-то вроде nohup /path/to/test.py &

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