Saya ingin melakukan hal yang sama, tetapi saya ingin melakukannya dalam satu file.
Jadi logikanya adalah:
- jika skrip dengan nama saya sedang berjalan, matikan, lalu keluar
- jika skrip dengan nama saya tidak berjalan, lakukan sesuatu
Saya memodifikasi jawabannya oleh Bakuriu dan menghasilkan ini:
from os import getpid
from sys import argv, exit
import psutil ## pip install psutil
myname = argv[0]
mypid = getpid()
for process in psutil.process_iter():
if process.pid != mypid:
for path in process.cmdline():
if myname in path:
print "process found"
process.terminate()
exit()
## your program starts here...
Menjalankan skrip akan melakukan apa pun yang dilakukan skrip. Menjalankan contoh skrip lainnya akan mematikan semua contoh skrip yang ada.
Saya menggunakan ini untuk menampilkan widget kalender PyGTK kecil yang berjalan saat saya mengklik jam. Jika saya mengklik dan kalender tidak aktif, kalender akan ditampilkan. Jika kalender berjalan dan saya mengeklik jam, kalender akan hilang.
Menggunakan psutil
yang mengagumkan perpustakaan itu cukup sederhana:
p = psutil.Process(pid)
p.terminate() #or p.kill()
Jika Anda tidak ingin memasang pustaka baru, Anda dapat menggunakan os
modul:
import os
import signal
os.kill(pid, signal.SIGTERM) #or signal.SIGKILL
Lihat juga os.kill
dokumentasi.
Jika Anda tertarik untuk memulai perintah python StripCore.py
jika tidak berjalan, dan mematikannya sebaliknya, Anda dapat menggunakan psutil
untuk melakukan ini dengan andal.
Sesuatu seperti:
import psutil
from subprocess import Popen
for process in psutil.process_iter():
if process.cmdline() == ['python', 'StripCore.py']:
print('Process found. Terminating it.')
process.terminate()
break
else:
print('Process not found: starting it.')
Popen(['python', 'StripCore.py'])
Contoh lari:
$python test_strip.py #test_strip.py contains the code above
Process not found: starting it.
$python test_strip.py
Process found. Terminating it.
$python test_strip.py
Process not found: starting it.
$killall python
$python test_strip.py
Process not found: starting it.
$python test_strip.py
Process found. Terminating it.
$python test_strip.py
Process not found: starting it.
Catatan :Di psutil
sebelumnya versi cmdline
adalah atribut bukan metode.