2012-03-10 3 views
1

У меня есть скрипт python, который требует открытия другого окна терминала для отправки некоторых команд. Stackoverflowers уже получили меня, что далеко:Отправка stdin в подпроцесс в скрипте python

import subprocess 
server_terminal = subprocess.Popen(['open','-a','/Applications/Utilities/Terminal.app','/Applications/Utilities/Terminal.app']) #Not sure about the inelegance of the doubled path, but it does open another terminal window, which I need. 

Следующий шаг, который мне нужно отправить этот терминал некоторые команды, так что я могу получить локальный сервер установлен на компьютере пользователя. Имея некоторые значительные проблемы, определяющие, как управлять этим подпроцессом.

Может ли кто-нибудь направить меня к методу, который я использовал бы, чтобы сделать этот подпроцесс терминала, принять stdin от меня? Я бы предпочел избегать сторонних модулей.

Редактировать: В некоторых контекстах - Моя главная цель - открыть selenium server в отдельном окне терминала, чтобы я мог выполнить его команды. Я уже знаю, как управлять сервером после его запуска, я просто не могу понять, как его автоматически запустить.

Спасибо за вашу помощь!

+1

Я не думаю, что вы можете управлять через STDIN. –

+0

Спасибо за ваш ответ. Любой другой способ, которым я мог бы? –

+0

Получение дескриптора окна, притворные нажатия клавиш или что-то в этом роде. Возможно, вы также можете предоставить сценарий в качестве аргумента командной строки для оболочки. Но, вероятно, вы скорее захотите запустить простой сценарий оболочки (и вообще никакого терминала). Можете ли вы рассказать нам больше о том, чего вы хотите достичь? –

ответ

2

Вы можете использовать Popen, чтобы запустить сервер напрямую:

selenium_jar = '/full/path/to/selenium-server-standalone-2.0b3.jar' 
path_to_fifo_profile = '...' 

# start external process 
p = subprocess.Popen(['java', '-jar', selenium_jar, 
           '-firefoxProfileTemplate', path_to_fifo_profile, 
        ]) 
# wait for it to finish before exiting 
p.wait() 

Если вы хотите, чтобы увидеть результат, вы можете использовать вместо os.system:

os.system('java ' 
      '-jar /path/to/selenium-server-standalone-2.0b3.jar ' 
      '-firefoxProfileTemplate /path/to/profile') 
+0

Не забудьте 'stdin = subprocess.PIPE'. Кроме того, 'communication' должен принимать некоторые входные данные. –

+0

@larsmans: сервер Selenium не должен читать от STDIN, afaik. –

+0

Я не знаком с Selenium, но в таком случае вы не должны использовать 'wait', а не' общаться'? –

Смежные вопросы