получить PID от Paramiko - PullRequest
       45

получить PID от Paramiko

7 голосов
/ 26 марта 2012

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

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

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

Ответы [ 2 ]

10 голосов
/ 04 января 2013

Вот способ получить идентификатор удаленного процесса:

def execute(channel, command):
    command = 'echo $$; exec ' + command
    stdin, stdout, stderr = channel.exec_command(command)
    pid = int(stdout.readline())
    return pid, stdin, stdout, stderr
0 голосов
/ 26 марта 2012

Обычно я использую стандартную команду UNIX pidof <command name>, когда проверяю процесс позже.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')

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

...