Как использовать subprocess.Popen () вместо os.popen () в Python? - PullRequest
1 голос
/ 05 августа 2020

Поскольку os.popen устарела, я хотел использовать subprocess.Popen (а также потому, что он намного надежнее во всех смыслах). У меня это было изначально, но я не могу понять, как сделать соответствующий переход.

PID_FILE = 'process.pid'
if os.path.exists( PID_FILE ):
    pid = int(open( PID_FILE,'rb').read().rstrip('\n'))
    pinfo = os.popen('ps %i' % pid).read().split('\n')

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 05 августа 2020

Просто используйте subprocess.Popen, чтобы создать новый процесс с его стандартным выводом, перенаправленным на PIPE, в текстовом режиме, а затем прочтите его стандартный вывод.

Python версия> = 3.6

from subprocess import Popen, PIPE
with Popen(f'ps {pid}'.split(), stdout=PIPE, text=True) as proc:
    pinfo = proc.stdout.readlines()

Как вы просили для python2 .7, я дал код. Но помните, что python2 .7 достиг EOL, и вы должны использовать python3 .x

Python version = 2.7

from subprocess import Popen, PIPE
proc = Popen(f'ps {pid}'.split(), stdout=PIPE)
pinfo = proc.stdout.readlines()

Обратитесь документация подпроцесса дополнительная информация

...