Saya menggunakan Windows 10 dan Python 3.7.

Saya menjalankan perintah berikut.

import subprocess
exeFilePath = "C:/Users/test/test.exe"
subprocess.run(exeFilePath)

File .exe diluncurkan dengan perintah ini, saya ingin memaksa-keluar ketika tombol diklik atau ketika fungsi dijalankan.

Melihat pertanyaan sebelumnya, telah ditunjukkan bahwa cara force quit adalah dengan mendapatkan PID dan melakukan OS.kill sebagai berikut.

import signal
os.kill(self.p.pid, signal.CTRL_C_EVENT)

Namun, saya tidak tahu bagaimana cara mendapatkan PID dari proses yang dimulai di subprocess.run.

Apa yang harus saya lakukan?

1
gncc 28 Mei 2020, 17:00

1 menjawab

Jawaban Terbaik

Tetapkan variabel ke subproses Anda

import os
import signal
import subprocess

exeFilePath = "C:/Users/test/test.exe"
p = subprocess.Popen(exeFilePath)
print(p.pid) # the pid
os.kill(p.pid, signal.SIGTERM) #or signal.SIGKILL 

Dalam kasus yang sama proses memiliki anak proses. Anda harus mematikan semua proses untuk menghentikannya. Dalam hal ini Anda dapat menggunakan psutil

#python -m pip install —user psutil 

import psutil

#remember to assign subprocess to a variable 

def kills(pid):
    '''Kills all process'''
    parent = psutil.Process(pid)
    for child in parent.children(recursive=True):
        child.kill()
    parent.kill()

#assumes variable p
kills(p.pid)

Ini akan mematikan semua proses di PID itu

1
Prayson W. Daniel 28 Mei 2020, 14:57