Получить ПИД из парамико

Я не могу найти простой ответ для этого: я использую paramiko для входа в систему и выполнения нескольких процессов удаленно, и мне нужны PID каждого процесса, чтобы проверить их позже. Кажется, что в paramiko не существует функции для получения PID исполняемой команды, поэтому я попытался использовать следующее:

stdin,stdout,stderr = ssh.exec_command('./someScript.sh &;echo $!;)

Я подумал, что тогда синтаксический анализ stdout вернет PID, но это не так. Я предполагаю, что я должен запустить script в фоновом режиме, чтобы иметь PID (пока он запущен). Есть ли более простой, очевидный способ получения PID?

2 ответа

Здесь можно получить идентификатор удаленного процесса:

def execute(channel, command):
 command = 'echo $$; exec ' + command
 stdin, stdout, stderr = channel.exec_command(command)
 pid = int(stdout.readline())
 return pid, stdin, stdout, stderr


Обычно я использую стандартную команду UNIX pidof, когда я проверю процесс позже. AFAIK нет более простого способа.

ОК, учитывая ваш комментарий, вы можете решить его, обернув ваш. /someScript.sh в процессе Python, который использует модуль подпроцесса.

wrapper.py:

import subprocess
import sys
proc = subprocess.Popen(sys.argv[1])
print proc.pid
proc.wait() #probably

Затем запустите

stdin,stdout,stderr = ssh.exec_command('./wrapper.py ./someScript.sh')

и прочитайте вывод

licensed under cc by-sa 3.0 with attribution.