У меня есть следующий код:

port_temp = 8080
process_getpodsnamesipport = subprocess.call(['bash','getpodsnamesipport.sh', port_temp],preexec_fn=os.setsid)

Я хочу сделать что-то вроде:

os.killpg(os.getpgid(process_getpodsnamesipport.pid), signal.SIGKILL)

Убить процесс, но это возможно только с подпроцессом. Открыть.

os.killpg(os.getpgid(process_getpodsnamesipport.pid), signal.SIGKILL)
AttributeError: 'int' object has no attribute 'pid'
-1
Racheli a 6 Фев 2020 в 16:25

2 ответа

Лучший ответ

Это сработало для меня:

process_getpodsnamesipport = subprocess.Popen(['./getpodsnamesipport.sh', str(port_temp)],preexec_fn=os.setsid)
    //something something
    os.killpg(os.getpgid(process_getpodsnamesipport.pid), signal.SIGKILL)
0
Racheli a 6 Фев 2020 в 19:11

Я бы использовал Popen и попробовал что-то вроде этого:

import subprocess
import os
import signal
import pipes

port_temp = 8080
cmd = ["./getpodsnamesipport.sh", str(port_temp)]

# to address Charles Duffy's suggestion for displaying the command
print(' '.join([pipes.quote(s) for s in cmd]))

process_getpodsnamesipport = subprocess.Popen(cmd,
                                              stdout=subprocess.PIPE,
                                              stderr=subprocess.PIPE,
                                              shell=False,
                                              preexec_fn=os.setsid)
std_out, std_err = process_getpodsnamesipport.communicate()
-1
mhck 6 Фев 2020 в 19:10