Найти - Пользователи
Полная версия: проблемы при работе с popen2; subprocess
Начало » Python для экспертов » проблемы при работе с popen2; subprocess
1
$m1t
Есть .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 =(
bialix
почитайте про параметр stdin функции subprocess.Popen
$m1t
читал, читаю, все равно не работает:
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

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

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

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

что значит:
почему программа из внешнего файла обламывается читать?
$m1t
>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 лежащего с ней в одном каталоге, однако этого не происходит.
$m1t
самое печальное, что из .py файла
import subprocess as sub
p = sub.Popen('sr.exe', stdin=sub.PIPE)
print p.communicate('?\n')
работает, из консолей wingIDE, PyCrust - нет.
p.s. вопрос, кажется, закрыт. bialix спасибо за моральну поддержку
bialix
$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

Самые известные “невидимые” грабли.
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