получить PID от paramiko
Я не могу найти простой ответ на этот вопрос: я использую paramiko для входа и выполнения ряда процессов удаленно, и мне нужны PIDs каждого процесса, чтобы проверить их позже. Кажется, в paramiko нет функции для получения PID выполняемой команды, поэтому я попытался использовать следующее:
stdin,stdout,stderr = ssh.exec_command('./someScript.sh &;echo $!;)
Я думал, что затем разбор через stdout вернет PID, но это не так. Я предполагаю, что я должен запустить сценарий в фоновом режиме, чтобы иметь PID (пока он работает). Есть ли более простой, очевидный способ получить PID?
2 ответов
вот способ получить ID удаленного процесса:
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 <command name>
, когда я проверю работу позже. AFAIK нет более простого способа.
OK, учитывая ваш комментарий, вы можете решить его, обернув свой. /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')
и прочитайте вывод