Найти - Пользователи
Полная версия: Передача результатов вывода в Python (Windows)
Начало » Python для экспертов » Передача результатов вывода в Python (Windows)
1
Cover Story
Всем доброго!
Бьюсь над одной проблемой, а именно мне необходимо узнать версию одной программы затем сравнить полученые данные со своими. Пишу так:
import os
pipe=os.popen('c:\\Program Files\\bondy\\bondy.exe --version')
x = pipe.read()
pipe.close
print x
if x == 7.13:
...
Понимаю, что данный код не верен. Но как написать правильно не пойму.

В некоторых документах написано что необходимо использовать popen2, но что-то я не пойму как им пользоваться.
Striver
Я делаю практически также. Недочет приведённого кода, по моему, только в ожидании, что x числом будет. x = pipe.read() возвращает строку. Со строкой и надо сравнивать.
Cover Story
Если я пишу: print pipe перед print.close() компилятор выдает следующее:
<open file ‘c:\Program Files\bondy\bondy.exe –version’, mode ‘r’ at 0x00B8DAD0>
Striver
Cover Story: ну и прекрасно, пусть выдаёт.
Используй x = pipe.read(), а потом проверяй x:
if x == ‘7.13’:
Leron
у меня пустая строчка получилась:
>>> import os
>>> f = os.popen("C:\\Program Files\\7-Zip\\7zFM.exe --version")
>>> x = f.read()
>>> f.close()
1
>>> x
''
>>>
Cover Story
Striver Если так делать, то у меня тоже пусто!
Хотя в cmd данная строка: “c:\Program Files\bondy\bondy.exe –version” выдает именно номер версии
Striver
Ну 7-Zip\7zFM.exe на –version и в командной строке ничего путного не выдаёт.
Я, конечно, не знаю, что такое bondy.exe, может есть своя специфика…
Вот как я принимаю ответ от консольной звонилки винды:
pipe=popen('rasdial "BSI"')
text=pipe.read()
return text
Она возвращает много строчек, среди них я уже ищу, получилось ли дозвониться или выясняю код ошибки.
Cover Story
Данный вариант у меня тоже нормально отработал! Возможно rasdial воспринимается как команда, потому как команда “dir” тоже нормально отрабатывается. А тут идет речь о запуске файла с путем. Может мой bondy.exe как-нибудь можно превратить в команду, как windows превращает c:\windows\system32\rasdial.exe в rasdial, но мне кажется если используется программа то в Python'е должен быть другой синтаксис.
Viper
Cover Story, ты что-то путаешь. Винда как раз делает наоборот (впринципе как и Линукс), она просто ищет rasdial и если находит то запускает c:\windows\system32\rasdial.exe. Так что принципиальной разницы между этими двумя примерами нету.

P.S. Впринципе можешь скопировать rasdial.exe в любую другую папку и попробовать запустить его оттуда с указанием полного пути ;).
Cover Story
Спасибо, разобрался! Проблема оказалась в os.popen. Когда я устанавливаю программу по пути: c:\Program Files\bondy\bondy.exe os.popen не отрабатывается, но когда я установил программу c:\bondy\bondy.exe, все нормально заработало. Мне кажется, что причина кроется в том os.popen не понимает не понимает пробела между Program и Files. Хотя я могу и ошибаться.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB