orion
Окт. 1, 2008 20:23:08
А открыть процесс в процессе никак нельзя?
shiza
Окт. 1, 2008 20:29:41
когда ты с помощью cmd запускаешь что-нибудь она его как подпроцесс и запускает ( а как же еще? =) )
Вроде она даже перенаправляет в него свой stdin
Так что попробуй продолжать общаться с этим процессом.
orion
Окт. 1, 2008 20:44:05
Нет, если я к Create.py напишу step1.stdin.write('hello\n'), то это hello уже будет относиться к
step1 = subprocess.Popen('cmd', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE).
А мне нужно, чтобы не так :)
shiza
Окт. 1, 2008 21:17:39
Тады наверное ой. в винде не самый лучший шелл в мире =)
Ты лучше опиши свою задачу целиком.
Почему нельзя впоспользоваться нормальными способоами установки окружения и прочее.
Может мы придумаем лучший вариант.
orion
Окт. 1, 2008 22:39:54
Да вроде здесь нечего описывать: нужно имитировать действия пользователя: в основном это запуск питоновских скриптов и работа именно в них. Но перед тем, как работать, мне нужно установить этот “нехороший” батник setenv.bat. В общем, если я его поставлю, то потом процесс в процессе, по-моему, запускать не нужно будет. Плюс ещё это всё должно быть в одном питоновском скрипте. Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
shiza
Окт. 1, 2008 23:05:26
orion
Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
Можно поступить так извращенно. Один раз запускаешь подпроцесс, запускаешь в нем этот батник. Потом в том-же процессе команду, которая выводит на экран переменные окружения. Парсишь ее результат, и запихиваешь в env =)
А вообще говоря - наверняка есть какие-нибудь модули для тестирования, автоматизации действий.
ключевые слова: testing, automation, python
orion
Окт. 1, 2008 23:23:36
А давай поступим так извращенно :). Только, как запустить команду, которая выводит на экран переменные окружения, пропарсить результат и запихнуть в env? Помоги, пожалуйта, начинающему великому хакеру. :)
shiza
Окт. 1, 2008 23:37:15
Если нужно значение конкерной, одной переменной, то надо дать ее без аргументов, как команду.
Чтоб вывести на экран все переменные окружения можно использовать команду 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;
Каждая переменная - на одной строке.
Можно все эти строки считать из stdout.
разбить на две части по знаку равно.
Они будут соотвественно ключем и значением для словаря env.
shiza
Окт. 1, 2008 23:51:00
Пришел в голову еще вариант, на попробовать =)
Если я не ошибаюсь, можно для конкртеного процесса получить по pid его переменные окружения.
Если не напрямую, то хоть с помощью winapi.
Правда в winapi я не спец.
Ferroman
Окт. 2, 2008 02:23:33
Стоит посмотреть в сторону модуля 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.