Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 24, 2008 14:58:15

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Всем доброго!
Бьюсь над одной проблемой, а именно мне необходимо узнать версию одной программы затем сравнить полученые данные со своими. Пишу так:

import os
pipe=os.popen('c:\\Program Files\\bondy\\bondy.exe --version')
x = pipe.read()
pipe.close
print x
if x == 7.13:
...
Понимаю, что данный код не верен. Но как написать правильно не пойму.

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



Python 2.7.3
Pyside 1.1.2

Офлайн

#2 Сен. 25, 2008 09:08:14

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Я делаю практически также. Недочет приведённого кода, по моему, только в ожидании, что x числом будет. x = pipe.read() возвращает строку. Со строкой и надо сравнивать.



Офлайн

#3 Сен. 25, 2008 09:20:46

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Если я пишу: print pipe перед print.close() компилятор выдает следующее:
<open file ‘c:\Program Files\bondy\bondy.exe –version’, mode ‘r’ at 0x00B8DAD0>



Python 2.7.3
Pyside 1.1.2

Офлайн

#4 Сен. 25, 2008 09:57:59

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Cover Story: ну и прекрасно, пусть выдаёт.
Используй x = pipe.read(), а потом проверяй x:
if x == ‘7.13’:



Офлайн

#5 Сен. 25, 2008 10:15:21

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

у меня пустая строчка получилась:

>>> import os
>>> f = os.popen("C:\\Program Files\\7-Zip\\7zFM.exe --version")
>>> x = f.read()
>>> f.close()
1
>>> x
''
>>>



Офлайн

#6 Сен. 25, 2008 11:35:09

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Striver Если так делать, то у меня тоже пусто!
Хотя в cmd данная строка: “c:\Program Files\bondy\bondy.exe –version” выдает именно номер версии



Python 2.7.3
Pyside 1.1.2

Отредактировано (Сен. 25, 2008 11:43:54)

Офлайн

#7 Сен. 25, 2008 12:08:30

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Ну 7-Zip\7zFM.exe на –version и в командной строке ничего путного не выдаёт.
Я, конечно, не знаю, что такое bondy.exe, может есть своя специфика…
Вот как я принимаю ответ от консольной звонилки винды:

pipe=popen('rasdial "BSI"')
text=pipe.read()
return text
Она возвращает много строчек, среди них я уже ищу, получилось ли дозвониться или выясняю код ошибки.



Офлайн

#8 Сен. 25, 2008 12:31:52

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Данный вариант у меня тоже нормально отработал! Возможно rasdial воспринимается как команда, потому как команда “dir” тоже нормально отрабатывается. А тут идет речь о запуске файла с путем. Может мой bondy.exe как-нибудь можно превратить в команду, как windows превращает c:\windows\system32\rasdial.exe в rasdial, но мне кажется если используется программа то в Python'е должен быть другой синтаксис.



Python 2.7.3
Pyside 1.1.2

Офлайн

#9 Сен. 26, 2008 11:47:14

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Cover Story, ты что-то путаешь. Винда как раз делает наоборот (впринципе как и Линукс), она просто ищет rasdial и если находит то запускает c:\windows\system32\rasdial.exe. Так что принципиальной разницы между этими двумя примерами нету.

P.S. Впринципе можешь скопировать rasdial.exe в любую другую папку и попробовать запустить его оттуда с указанием полного пути ;).



Офлайн

#10 Сен. 26, 2008 12:29:14

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача результатов вывода в Python (Windows)

Спасибо, разобрался! Проблема оказалась в os.popen. Когда я устанавливаю программу по пути: c:\Program Files\bondy\bondy.exe os.popen не отрабатывается, но когда я установил программу c:\bondy\bondy.exe, все нормально заработало. Мне кажется, что причина кроется в том os.popen не понимает не понимает пробела между Program и Files. Хотя я могу и ошибаться.



Python 2.7.3
Pyside 1.1.2

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version