Вот контекст: Я использую python 2.7.5. И я хотел бы запускать команды UNIX, а также команды maven в сценарии python. Мне это удалось, используя os.system("cmd")
, но мне нужно работать над результатом данной команды. После прочтения документа и некоторых потоков здесь я решил использовать модуль подпроцесса для перенаправления вывода на stdout с помощью PIPE. Неожиданно я получаю OSError, как показано на прилагаемом изображении. Ваша помощь будет высоко оценена. В дополнение к данному образцу в прилагаемом изображении, я попытался:Модуль подпроцесса Python, предоставляющий OSError во время выполнения команд UNIX
p = os.popen("java -version")
result = subprocess.check_output(p, shell=True)
subprocess.call("ls /usr", shell=True)
p.s. Using shell=True is strongly discouraged (doc), since it can be dangerous when coupled with unsanitized input.
Кроме того, я смотрел на данном сценарии в сообщении об ошибке /usr/lib64/python2.7/subprocess.py, line 711 adn 1327
но не узнать больше, чем то, что упоминалось в сообщение об ошибке: raise child_exception Subprocess Terminal Output
Спасибо, Gil. теперь команда out1a и ее печать работают. Но как я мог лишить первую строку, так как я хочу проверить, соответствует ли версия определенному числу? Я попытался перенаправить вывод в файл .txt, но не работал. Есть ли команда, которая помогает извлекать и работать непосредственно с выходом терминала? – Mams
В результате вы получите строку, содержащую несколько строк текста. Используйте 'out1a.splitlines()', чтобы разложить это на отдельные строки. Это возвращает «кортеж», из которого вы можете выбрать интересующие вас компоненты. Попробуйте, например, 'print (out1a.splitlines() [0])'. Затем используйте другие строковые методы, чтобы изолировать нужный номер версии (см. Https://docs.python.org/2/library/stdtypes.html?string-methods#string-methods). –
Хорошо, это помогло мне решить мою проблему. Опять же, спасибо Гил. Вот как я завершил: 'import subprocess import re res = subprocess.check_output (['java', '-version'], stderr = subprocess.STDOUT) res2 = res.splitlines() [0] .split () [2] VersionNumber = re.findall ('[0-9 ._] +, res2) печати (VersionNumber) , если VersionNumber [0]> = 1.7: \t печати "Холодный" еще: \t печать «Установить более новую версию» ' – Mams