我使用的是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
有人可以帮我解决这个问题吗?
答案 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)
虽然运行子流程很容易,但在图形终端中启动一个行为与用户启动的行为完全相同,这是一个小问题。您可以使用我的程序interminal
(link),这基本上完成了Stephen Rauch对gnome-terminal
的回答,但是通过shell,以便用户环境变量和别名等都可用,可能对它们影响ssh
运行的方式有用。
您可以像这样在Python中使用它:
import subprocess
subprocess.Popen(['interminal', 'ssh', '-t', 'username@{}'.format(ip_address)])