Найти - Пользователи
Полная версия: Модуль subprocess
Начало » Python для экспертов » Модуль subprocess
1 2 3 4
orion
А открыть процесс в процессе никак нельзя?
shiza
когда ты с помощью cmd запускаешь что-нибудь она его как подпроцесс и запускает ( а как же еще? =) )
Вроде она даже перенаправляет в него свой stdin
Так что попробуй продолжать общаться с этим процессом.
orion
Нет, если я к Create.py напишу step1.stdin.write('hello\n'), то это hello уже будет относиться к
step1 = subprocess.Popen('cmd', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE).
А мне нужно, чтобы не так :)
shiza
Тады наверное ой. в винде не самый лучший шелл в мире =)

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

А вообще говоря - наверняка есть какие-нибудь модули для тестирования, автоматизации действий.
ключевые слова: testing, automation, python
orion
А давай поступим так извращенно :). Только, как запустить команду, которая выводит на экран переменные окружения, пропарсить результат и запихнуть в env? Помоги, пожалуйта, начинающему великому хакеру. :)
shiza
Если нужно значение конкерной, одной переменной, то надо дать ее без аргументов, как команду.
Чтоб вывести на экран все переменные окружения можно использовать команду 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
Пришел в голову еще вариант, на попробовать =)
Если я не ошибаюсь, можно для конкртеного процесса получить по pid его переменные окружения.
Если не напрямую, то хоть с помощью winapi.
Правда в winapi я не спец.
Ferroman
Стоит посмотреть в сторону модуля 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.
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