Python Popen, OS, Commands все ничего не возвращают при запуске команды в Linux - PullRequest
0 голосов
/ 13 ноября 2018

Так что мне нужно получить версию чего-либо на клиенте, и когда я пытаюсь использовать Popen, Call, Check_Call, OS, Commands, все это возвращает значение ничто. Когда я запускаю скрипт в системе в putty, он возвращает мне пустую строку. Это может быть из-за замазки? Запуск на Linux, CentOS, если это имеет какое-либо значение. Спасибо, ребята, заблаговременно.

def getJavacVer():
    p = sp.Popen("javac -version", stdout=sp.PIPE, shell=True)
    (output, err) = p.communicate()
    print output

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Программа javac возвращает вывод -version через stderr, поэтому аргумент stderr Popen также необходимо передать. Попробуйте:

>>> from subprocess import Popen
>>> from subprocess import PIPE
>>> p = Popen(['javac', '-version'], stdout=PIPE, stderr=PIPE)
>>> p.communicate()
(b'', b'javac 1.8.0_171\n')

Вторым элементом результата является захваченный вывод потока stderr, который содержит номер версии.

0 голосов
/ 13 ноября 2018

Спасибо нескольким ребятам, которые ответили на вопрос. Вывод выводится в stderr вместо stdout. Спасибо всем

0 голосов
/ 13 ноября 2018

Это будет работать только на * nix:

import commands
print commands.getstatusoutput('javac -version')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...