Форум сайта python.su
А открыть процесс в процессе никак нельзя?
Офлайн
когда ты с помощью cmd запускаешь что-нибудь она его как подпроцесс и запускает ( а как же еще? =) )
Вроде она даже перенаправляет в него свой stdin
Так что попробуй продолжать общаться с этим процессом.
Отредактировано (Окт. 1, 2008 20:30:54)
Офлайн
Нет, если я к Create.py напишу step1.stdin.write('hello\n'), то это hello уже будет относиться к
step1 = subprocess.Popen('cmd', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE).
А мне нужно, чтобы не так :)
Офлайн
Тады наверное ой. в винде не самый лучший шелл в мире =)
Ты лучше опиши свою задачу целиком.
Почему нельзя впоспользоваться нормальными способоами установки окружения и прочее.
Может мы придумаем лучший вариант.
Отредактировано (Окт. 1, 2008 21:28:04)
Офлайн
Да вроде здесь нечего описывать: нужно имитировать действия пользователя: в основном это запуск питоновских скриптов и работа именно в них. Но перед тем, как работать, мне нужно установить этот “нехороший” батник setenv.bat. В общем, если я его поставлю, то потом процесс в процессе, по-моему, запускать не нужно будет. Плюс ещё это всё должно быть в одном питоновском скрипте. Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
Офлайн
orionМожно поступить так извращенно. Один раз запускаешь подпроцесс, запускаешь в нем этот батник. Потом в том-же процессе команду, которая выводит на экран переменные окружения. Парсишь ее результат, и запихиваешь в env =)
Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
Отредактировано (Окт. 1, 2008 23:18:03)
Офлайн
А давай поступим так извращенно :). Только, как запустить команду, которая выводит на экран переменные окружения, пропарсить результат и запихнуть в env? Помоги, пожалуйта, начинающему великому хакеру. :)
Офлайн
Если нужно значение конкерной, одной переменной, то надо дать ее без аргументов, как команду.
Чтоб вывести на экран все переменные окружения можно использовать команду SET без аргументов.
Получится примерно такая штука:
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
windir=C:\WINDOWS
Path=C:\PROGRA~1\COMMON~1\GTK\2.0\bin;C:\WINDOWS\system32;C:\WINDOWS;c:\Python25;
Отредактировано (Окт. 1, 2008 23:45:01)
Офлайн
Пришел в голову еще вариант, на попробовать =)
Если я не ошибаюсь, можно для конкртеного процесса получить по pid его переменные окружения.
Если не напрямую, то хоть с помощью winapi.
Правда в winapi я не спец.
Отредактировано (Окт. 2, 2008 00:02:39)
Офлайн
Стоит посмотреть в сторону модуля cmd
The Cmd class provides a simple framework for writing line-oriented command interpreters. These are often useful for test harnesses, administrative tools, and prototypes that will later be wrapped in a more sophisticated interface.
Офлайн