2017-01-21 9 views
0

Я использую Python 2.7.5, так как эта версия установлена ​​на машине, на которой я хочу запустить скрипт.Python, запустить терминал и выполнить команду в нем

Я создал простой графический интерфейс в Tkinter, с кнопкой и текстовым вводом. Теперь на одном входе я предоставляю ip или имя хоста сервера, на следующем шаге я читаю значение полей ввода и отправляю его в терминал linux bash, и здесь у меня есть проблема.

Чтение значения из поля ввода (хорошо работает)

nazwa_ip = self.Input_IP_hostname.get("1.0", 'end-1c') 

и следующая:

os.system('gnome-terminal --window-with-profile=MY_PROFILE -e "ssh -t [email protected]_ip"') 

и здесь проблема, потому что это обыкновение менять "nazwa_ip" для считанного значения. Это COMAND отправить на терминал:

ssh -t [email protected]_ip 

, но я хочу отправить:

ssh -t [email protected]_adres_from_input_field 

Может кто-нибудь помочь мне решить эту проблему?

+0

Цените свои усилия, но почему же вы добавили 'bash' тег здесь, это не выглядит очень актуальным. – Inian

+1

Как использовать модуль подпроцесса для выполнения команды? – fedepad

+0

Возможный дубликат [Вызов внешней команды в Python] (http://stackoverflow.com/questions/89228/calling-an-external-command-in-python) –

ответ

0

Строка форматирования будет работать здесь:

os.system('gnome-terminal --window-with-profile=MY_PROFILE -e "ssh -t [email protected]%s"' % nazwa_ip) 
+0

Является ли это строкой _comprehension_? Похоже на строку _formatting_ для меня. – ForceBru

0

Используя метод подпроцесс может быть лучше, чтобы сделать это.

import subprocess 

nazwa_ip = self.Input_IP_hostname.get("1.0", 'end-1c') 
ssh_param = "ssh -t [email protected]{}".format(nazwa_ip) 
subprocess.call(['gnome-terminal', '--window-with-profile=MY_PROFILE', '-e', ssh_param]) 
1

В соответствии с документами Python рекомендуется заменить os.system модулем подпроцесса.

status = os.system("mycmd" + " myarg") 
# becomes 
status = subprocess.call("mycmd" + " myarg", shell=True) 
0

Пока работает подпроцесс легко, начиная один в графическом терминале, который ведет себя так же, как один пользователь начал немного Tricker. Вы можете использовать мою программу interminal (link), которая в основном делает то, что отвечает Стивен Раух с gnome-terminal, но через оболочку, так что все переменные и псевдонимы пользовательских окружений и т. Д. Доступны, что может быть полезно в offshance, что они влияют на то, как работает ssh ,

Вы бы использовать его с Python, как это:

import subprocess 
subprocess.Popen(['interminal', 'ssh', '-t', '[email protected]{}'.format(ip_address)])