Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 1, 2008 20:23:08

orion
От:
Зарегистрирован: 2008-10-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

А открыть процесс в процессе никак нельзя?



Офлайн

#2 Окт. 1, 2008 20:29:41

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

когда ты с помощью cmd запускаешь что-нибудь она его как подпроцесс и запускает ( а как же еще? =) )
Вроде она даже перенаправляет в него свой stdin
Так что попробуй продолжать общаться с этим процессом.



Отредактировано (Окт. 1, 2008 20:30:54)

Офлайн

#3 Окт. 1, 2008 20:44:05

orion
От:
Зарегистрирован: 2008-10-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

Нет, если я к Create.py напишу step1.stdin.write('hello\n'), то это hello уже будет относиться к
step1 = subprocess.Popen('cmd', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE).
А мне нужно, чтобы не так :)



Офлайн

#4 Окт. 1, 2008 21:17:39

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

Тады наверное ой. в винде не самый лучший шелл в мире =)

Ты лучше опиши свою задачу целиком.
Почему нельзя впоспользоваться нормальными способоами установки окружения и прочее.
Может мы придумаем лучший вариант.



Отредактировано (Окт. 1, 2008 21:28:04)

Офлайн

#5 Окт. 1, 2008 22:39:54

orion
От:
Зарегистрирован: 2008-10-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

Да вроде здесь нечего описывать: нужно имитировать действия пользователя: в основном это запуск питоновских скриптов и работа именно в них. Но перед тем, как работать, мне нужно установить этот “нехороший” батник setenv.bat. В общем, если я его поставлю, то потом процесс в процессе, по-моему, запускать не нужно будет. Плюс ещё это всё должно быть в одном питоновском скрипте. Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.



Офлайн

#6 Окт. 1, 2008 23:05:26

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

orion
Подозреваю, что здесь только придётся пользоваться env. Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
Можно поступить так извращенно. Один раз запускаешь подпроцесс, запускаешь в нем этот батник. Потом в том-же процессе команду, которая выводит на экран переменные окружения. Парсишь ее результат, и запихиваешь в env =)

А вообще говоря - наверняка есть какие-нибудь модули для тестирования, автоматизации действий.
ключевые слова: testing, automation, python



Отредактировано (Окт. 1, 2008 23:18:03)

Офлайн

#7 Окт. 1, 2008 23:23:36

orion
От:
Зарегистрирован: 2008-10-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

А давай поступим так извращенно :). Только, как запустить команду, которая выводит на экран переменные окружения, пропарсить результат и запихнуть в env? Помоги, пожалуйта, начинающему великому хакеру. :)



Офлайн

#8 Окт. 1, 2008 23:37:15

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

Если нужно значение конкерной, одной переменной, то надо дать ее без аргументов, как команду.
Чтоб вывести на экран все переменные окружения можно использовать команду 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.



Отредактировано (Окт. 1, 2008 23:45:01)

Офлайн

#9 Окт. 1, 2008 23:51:00

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль subprocess

Пришел в голову еще вариант, на попробовать =)
Если я не ошибаюсь, можно для конкртеного процесса получить по pid его переменные окружения.
Если не напрямую, то хоть с помощью winapi.
Правда в winapi я не спец.



Отредактировано (Окт. 2, 2008 00:02:39)

Офлайн

#10 Окт. 2, 2008 02:23:33

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Модуль subprocess

Стоит посмотреть в сторону модуля 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.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version