0

I created GUI python with Tkinter and connect with the server via SSH and everything is good, but when I'm using the subprocess it give me error:

import subprocess
subprocess.Popen('pwd',shell=True)

error: 'pwd' is not recognized as an internal or external command, operable program or batch file.

How can I set the result into Textbox?

import tkinter as tk
from tkinter import messagebox
from tkinter import *
from  getpass import *
from socket import *
import paramiko
import sys
import time
import socket 
import platform
import subprocess 
import os
import os
class LoginFrame(Frame):

def __init__(self, master):
    super().__init__(master)
    self.label_ipa=Label(self, text="IP Address",font=("Times New Roman",14), fg="blue")
    self.label_username = Label(self, text="Username",font=("Times New Roman", 14), height=4, fg="blue")
    self.label_password = Label(self, text="Password",font=("Times New Roman", 14), height=4, fg="blue")
    self.entry_ipa = Entry(self,justify=CENTER)#.grid(row-0,column=1)
    self.entry_username = Entry(self,justify=CENTER)#.grid(row=0,column=1,pady=4)
    self.entry_password = Entry(self, show="*",justify=CENTER)
    self.label_ipa.grid(row=0,sticky=E)
    self.label_username.grid(row=1, sticky=E)
    self.label_password.grid(row=2, sticky=E)
    self.entry_ipa.grid(row=0,column=1)
    self.entry_username.grid(row=1, column=1)
    self.entry_password.grid(row=2, column=1)
    self.disct = Button(self, text="Close Session",command=self._disc_,font=("Times New Roman", 14), width=10,height=2, fg="red")
    self.logbtn = Button(self, text="Connecting", command=self._login_,font=("Times New Roman", 14), width=10,height=2, fg="green")
    self.logbtn.grid(row=3,column=0)
    self.disct.grid(row=3,column=2)
    self.pack()

def _login_(self):

            ipa = self.entry_ipa.get()

            username = self.entry_username.get()
            password = self.entry_password.get()

            if not ipa:
                tk.messagebox.showerror("Error MessageBox","please Enter the IP Address",icon="warning")
                return False

            if not username:
                tk.messagebox.showerror("Error MessageBox","please Enter Your Username",icon="warning")
                return False
            if not password:
                tk.messagebox.showerror("Error MessageBox","please Enter Your Password",icon="warning")
                return False

            cl1=paramiko.SSHClient()
            cl1.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            cl1.connect(ipa,username=username,password=password)

            if(ipa==ipa and username==username and password==password):

                    tk.messagebox.showinfo("OPEN THE Session","SSH connection to %s established" %ipa)

            else:
    #client_key
                    tk.messagebox.showerror("Error MessageBox","please try again",icon="warning")
            window = Toplevel(root)
            window.title("Command Action")
            window.geometry("400x350+400+350")
            b1=Button(window,text="check Memory",bg="red").place(x=0,y=0)
            b2=Button(window,text="Free disk Space",bg="red").place(x=100,y=0)
            b3=Button(window,text="Imprt XML FILE",bg="red").place(x=220,y=0)
            text=Text(window,height=10,width=50).place(x=0,y=50)
            subprocess.Popen('pwd',shell=True)
def _disc_(self):

      MsgBox = tk.messagebox.askquestion ('Exit Application','Are you sure you want Dissconnecting ',icon = 'warning')

      if MsgBox == "yes":

          root.destroy()

      else:

          tk.messagebox.showinfo('Return','You will now return to the 
           application screen')

root = tk.Tk()
root.geometry('400x400+50+50')
root.title('Connecting to')
lf = LoginFrame(root)
root.mainloop()

3 Answers 3

1

You can run it in a shell. pwd comes from the shell i believe.

So something like this: subprocess.Popen('bash -c pwd')

Sign up to request clarification or add additional context in comments.

Comments

0

i resolved my problem by myself, i used

stdin, stdout, stderr=cl1.exec_command("free -g")
            print(stdout.read())

now everything is good, please if you can advise me that i want insert the result into the text box*

1 Comment

First you need to separate the statement text=Text(...).place(...) into two statements: text = Text(...) and text.place(...). Then you can insert the result of the remote command: text.insert(END, stdout.read()).
0

Why do you launch the pwd command in the first place? When changing directory, you modify the PWD environment variable, and the command pwd just asks for this environment variable. Something like this (not tested) should solve your issue:

import os
print(os.environ['PWD'])

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.