π» ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Python Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅: ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Python Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ subprocess. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import subprocess
# ΠΠ°ΠΏΡΡΠΊ Python-ΡΠΊΡΠΈΠΏΡΠ° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
subprocess.Popen(["python", "script.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ "script.py" Π½Π° ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠΊΡΠΈΠΏΡΡ Python. ΠΡΠΎΡ ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΡΠΈΡ ΡΠΊΡΠΈΠΏΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π²Π°ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Python Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ Python-ΡΠΊΡΠΈΠΏΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±Π΅Π· ΠΏΡΡΠΌΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π·Π°ΠΏΡΡΠΊΠ° Python-ΡΠΊΡΠΈΠΏΡΠΎΠ² Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Linux ΠΈΠ»ΠΈ macOS
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Linux ΠΈΠ»ΠΈ macOS, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ nohup
Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Python-ΡΠΊΡΠΈΠΏΡΠ° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠΎΠΌΠ°Π½Π΄Π° nohup
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
nohup python script.py &
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠΊΡΠΈΠΏΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ script.py
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python ΠΈ Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄ΠΎΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠ° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π² ΡΠΎΠ½Π΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° Python-ΡΠΊΡΠΈΠΏΡΠΎΠ² Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ subprocess
ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python.
import subprocess
subprocess.Popen(["python", "script.py"], creationflags=subprocess.CREATE_NEW_CONSOLE)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Popen
ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ subprocess
Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠ° script.py
. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ creationflags=subprocess.CREATE_NEW_CONSOLE
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π² Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ.
3. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Python 'python-daemon'
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π΅ΠΌΠΎΠ½-ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ Python 'python-daemon'.
import daemon
with daemon.DaemonContext():
# ΠΠ°Ρ ΠΊΠΎΠ΄ Π·Π΄Π΅ΡΡ
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π΅ΠΌΠΎΠ½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° DaemonContext
ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° 'python-daemon', Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π²Π°Ρ ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Python-ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±Π΅Π· Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π·Π°ΠΏΡΡΠΊΠ° Python Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Python.