Форум сайта python.su
Есть .exe с которым нужно общаться из питоновского скрипта. .exe запускается в интерактивном и режиме ему нужно передать пару комманд что бы он кое что посчитал, а потом забрать результат. Этот exe перед запуском считывает данные из текстового файла.
я коннекчусь через popen2:
t=popen2.popen2('c:\\lab\\manager\\sr.exe')
t[1].write('?')
Офлайн
почитайте про параметр stdin функции subprocess.Popen
Офлайн
читал, читаю, все равно не работает:
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)
Офлайн
так не пробовали?
p = Popen(“somefile.exe”, shell=True, stdin=PIPE, stdout=PIPE)
что значит:
почему программа из внешнего файла обламывается читать?
Офлайн
>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
>>>
bialixпрограмма sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит.
что значит: почему программа из внешнего файла обламывается читать?
Офлайн
самое печальное, что из .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)
Офлайн
$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 закрылось?
Ключевое слово – лежит в одном каталоге. Если программа sc.exe запускается не из своего каталога, то относительный путь к файлу index.txt будет не тот, что ожидаешь. Поэтому программе sc.exe нужно определять полный путь к своему exe и потом корректировать этот путь, чтобы прочитать index.txtbialixпрограмма sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит.
что значит: почему программа из внешнего файла обламывается читать?
Офлайн