Переместить код 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 &