LINUX.ORG.RU

Python, subprocess - как получить PID процесса (не шелла)?

 , ,


0

3

Стартую программу через Popen с параметром shell=True. Соответственно, мне известен только PID шелла, а надо знать PID запущенной в шелле программы. Как его получить? Нагуглил это, но нифига не понял, объясните внятно что делать.

Ответ на: комментарий от deadNightTiger
sub = subprocess.Popen('java -jar glowstone++-1.9.2-SNAPSHOT.jar', shell=True,
                       stdin=PIPE, stdout=PIPE,
                       stderr=err, close_fds=True,
                       cwd='/home/alex/servers/glow', universal_newlines=True)
InterVi ★★ ()
Ответ на: комментарий от deadNightTiger

О, я понял. Работает вот так:

sub = subprocess.Popen(['/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java',
                                    '-jar', 'glowstone++-1.9.2-SNAPSHOT.jar'],
                                    shell=False,
                                    stdin=PIPE, stdout=PIPE,
                                    stderr=err, close_fds=True,
                                    cwd=path, universal_newlines=True)
Но неужели нет другого пути? Неудобно же.

InterVi ★★ ()
Ответ на: комментарий от InterVi

Что именно тебе неудобно? То что список, а не одна строка? Так секурнее и правильнее, да и удобнее, когда параметры могут содержать пробелы. Но если напрягает, можешь написать

'/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar glowstone++-1.9.2-SNAPSHOT.jar'.split()

Psych218 ★★★★★ ()
Последнее исправление: Psych218 (всего исправлений: 4)
Ответ на: комментарий от deadNightTiger

Благодарю за подсказку, всё пашет. split(' ') использую, ибо там команда из конфига читается.

InterVi ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.