Python,运行终端,并在其中执行命令

时间:2017-01-21 16:09:50

标签: python linux os.system

我使用的是Python 2.7.5,因为这个版本安装在我想运行脚本的机器上。

我在Tkinter中创建了一个简单的GUI,带有按钮和文本输入。 现在在一个输入中我提供服务器的ip或主机名,在下一步中我读取输入字段的值并将其发送到linux bash终端,这里我有一个问题。

从输入字段读取值(效果很好)

UITableViewCell

和下一个:

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

这就是问题,因为它不会改变" nazwa_ip"读取值。那个命令发送到终端:

os.system('gnome-terminal --window-with-profile=MY_PROFILE -e "ssh -t user_name@nazwa_ip"')

但我想发送:

ssh -t user_name@nazwa_ip

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

根据Python文档,建议将os.system替换为子进程模块。

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

答案 1 :(得分:0)

字符串格式化将在此处起作用:

os.system('gnome-terminal --window-with-profile=MY_PROFILE -e "ssh -t user_name@%s"' % nazwa_ip)

答案 2 :(得分:0)

使用子进程方法可能更好。

import subprocess

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

答案 3 :(得分:0)

虽然运行子流程很容易,但在图形终端中启动一个行为与用户启动的行为完全相同,这是一个小问题。您可以使用我的程序interminallink),这基本上完成了Stephen Rauch对gnome-terminal的回答,但是通过shell,以便用户环境变量和别名等都可用,可能对它们影响ssh运行的方式有用。

您可以像这样在Python中使用它:

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