Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2007 17:18:25

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

Есть .exe с которым нужно общаться из питоновского скрипта. .exe запускается в интерактивном и режиме ему нужно передать пару комманд что бы он кое что посчитал, а потом забрать результат. Этот exe перед запуском считывает данные из текстового файла.
я коннекчусь через popen2:

t=popen2.popen2('c:\\lab\\manager\\sr.exe')
программа выдает ошибку: она не может считать из текстового файла; при использовании subprocess та же ерунда.
более того, когда я потом пытаюсь дать sr.exe другую команду используя
t[1].write('?')
получаю:
Traceback (most recent call last):
File “<input>”, line 1, in ?
IOError: Invalid argument
в чем дело?
работаю под win; хотя в дальнейшем этот скрипт надо будет запускать и под nix =(



Офлайн

#2 Сен. 10, 2007 17:54:09

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

почитайте про параметр stdin функции subprocess.Popen



Офлайн

#3 Сен. 10, 2007 19:46:40

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

читал, читаю, все равно не работает:
p = Popen(, shell=True, stdin=PIPE, stdout=PIPE)
Traceback (most recent call last):
File “<input>”, line 1, in ?
File “C:\Python24\lib\subprocess.py”, line 533, in __init__
(p2cread, p2cwrite,
File “C:\Python24\lib\subprocess.py”, line 623, in _get_handles
errwrite = self._make_inheritable(errwrite)
File “C:\Python24\lib\subprocess.py”, line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
TypeError: an integer is required

пример взят из хелпа

и все еще не ясно, почему программа из внешнего файла обламывается читать?



Отредактировано (Сен. 10, 2007 19:47:20)

Офлайн

#4 Сен. 10, 2007 20:12:50

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

так не пробовали?

p = Popen(“somefile.exe”, shell=True, stdin=PIPE, stdout=PIPE)

что значит:

почему программа из внешнего файла обламывается читать?



Офлайн

#5 Сен. 10, 2007 21:00:26

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

>p = Popen(“somefile.exe”, shell=True, stdin=PIPE, stdout=PIPE)
тоже пробовал эффект тот же.
заметил другое, что если запускаю из под PyCrust который использует pythonw.exe то ни чегео не работает. Если из под обычного python.exe то все работает, только несколько не так, как мне кажется это должно работать:

>>> from subprocess import *
>>> p = Popen('c:\\windows\\system32\\cmd.exe',stdin=PIPE,stdout=PIPE,shell=True)
>>> print p.communicate('dir')
('Microsoft Windows XP [\x82\xa5\xe0\xe1\xa8\xef 5.1.2600]\r\n(\x91) \x8a\xae\xe0\xaf\xae\xe0\xa0\xe6\xa8\xef \x8c\xa0\xa9\xaa\xe0\xae\xe1\xae\xe4\xe2, 1985-2001.\r\n\r\nC:\\Documents and Settings\\Smit>\x8f\xe0\xae\xa4\xae\xab\xa6\xa8\xe2\xec? ', None)
>>> print p.communicate('dir')
Traceback (most recent call last):
File "C:\Program Files\Wing IDE 2.1\src\debug\server\_sandbox.py", line 1, in ?
# Used internally for debug sandbox under external interpreter
File "C:\Python24\Lib\subprocess.py", line 783, in communicate
self.stdin.write(input)
ValueError: I/O operation on closed file
>>>
сообствено вопросов два: почему не выполнена команда dir и почему cmd закрылось?

bialix
что значит: почему программа из внешнего файла обламывается читать?
программа sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит.



Офлайн

#6 Сен. 10, 2007 21:37:17

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

самое печальное, что из .py файла
import subprocess as sub
p = sub.Popen('sr.exe', stdin=sub.PIPE)
print p.communicate('?\n')
работает, из консолей wingIDE, PyCrust - нет.
p.s. вопрос, кажется, закрыт. bialix спасибо за моральну поддержку



Отредактировано (Сен. 10, 2007 21:38:22)

Офлайн

#7 Сен. 11, 2007 11:13:44

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы при работе с popen2; subprocess

$m1t
File “C:\Program Files\Wing IDE 2.1\src\debug\server\_sandbox.py”, line 1, in ?
# Used internally for debug sandbox under external interpreter

сообствено вопросов два: почему не выполнена команда dir и почему cmd закрылось?
Ответ собственно один – при запуске из-под отладчика программы ведут себя немного по-другому.

bialix
что значит: почему программа из внешнего файла обламывается читать?
программа sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит.
Ключевое слово – лежит в одном каталоге. Если программа sc.exe запускается не из своего каталога, то относительный путь к файлу index.txt будет не тот, что ожидаешь. Поэтому программе sc.exe нужно определять полный путь к своему exe и потом корректировать этот путь, чтобы прочитать index.txt

Самые известные “невидимые” грабли.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version