python - পাইথন প্যারামিকো ব্যবহার করে এসএসএইচ-তে কমান্ড/স্ক্রিপ্ট ইনপুট/ভেরিয়েবলগুলি পাস করুন



linux bash (1)

আপনার কমান্ড stdin জন্য প্রয়োজনীয় ইনপুটটি লিখুন:

stdin, stdout, stderr = self.client.exec_command(command)
stdin.write(name + '\n')
stdin.flush()

(আপনার অবশ্যই অবশ্যই module থেকে sendCommand name পরিবর্তনশীল প্রচার করতে sendCommand , তবে আমি ধরে নিই যে আপনি কীভাবে সেই অংশটি করবেন তা জানেন)।

আমার এসএসএইচ দিয়ে একটি রিমোট সার্ভারে ব্যাশ স্ক্রিপ্টের প্রতিক্রিয়াগুলি পাঠানোর সমস্যা হচ্ছে।

আমি পাইথন ৩.6.৫ এ একটি প্রোগ্রাম লিখছি যা দূরবর্তী লিনাক্স সার্ভারে এসএসএইচ করবে। এই রিমোট লিনাক্স সার্ভারে একটি ব্যাশ স্ক্রিপ্ট রয়েছে যা আমি চালাচ্ছি যার জন্য পূরণ করতে ব্যবহারকারীদের ইনপুট দরকার whatever যে কারণেই আমি আমার মূল পাইথন প্রোগ্রামটি থেকে এসএসএইচের মাধ্যমে কোনও ব্যবহারকারী ইনপুট পাস করতে পারি না এবং এটিতে ব্যাশ স্ক্রিপ্ট ব্যবহারকারী ইনপুট প্রশ্নগুলি পূরণ করতে পারি।

main.py

from tkinter import *
import SSH

hostname = 'xxx'
username = 'xxx'
password = 'xxx'

class Connect:
    def module(self):
        name = input()
        connection = SSH.SSH(hostname, username, password)
        connection.sendCommand(
            'cd xx/{}/xxxxx/ && source .cshrc && ./xxx/xxxx/xxxx/xxxxx'.format(path))

SSH.py

from paramiko import client

class SSH:

    client = None

    def __init__(self, address, username, password):
        print("Login info sent.")
        print("Connecting to server.")
        self.client = client.SSHClient()    # Create a new SSH client
        self.client.set_missing_host_key_policy(client.AutoAddPolicy())
        self.client.connect(
            address, username=username, password=password, look_for_keys=False) # connect

    def sendCommand(self, command):
        print("Sending your command")
        # Check if connection is made previously
        if (self.client):
            stdin, stdout, stderr = self.client.exec_command(command)
            while not stdout.channel.exit_status_ready():
                # Print stdout data when available
                if stdout.channel.recv_ready():
                    # Retrieve the first 1024 bytes
                    alldata = stdout.channel.recv(1024)
                    while stdout.channel.recv_ready():
                        # Retrieve the next 1024 bytes
                        alldata += stdout.channel.recv(1024)


                    # Print as string with utf8 encoding
                    print(str(alldata, "utf8"))
        else:
            print("Connection not opened.")

ক্লাস Connect চূড়ান্ত /xxxxxx হ'ল রিমোট স্ক্রিপ্ট। এটি যেমন একটি বিন্যাসের অপেক্ষায় একটি পাঠ্য প্রতিক্রিয়া খুলবে

আপনার নাম কি:

এবং আমি ক্লাস Connect মধ্যে আমার main.py ফাইল থেকে স্ক্রিপ্টের প্রতিক্রিয়াটি সঠিকভাবে পাস করার কোনও উপায় খুঁজে পাচ্ছি না।

আমি যেভাবেই যুক্তি বা পরিবর্তনশীল হিসাবে name পাস করার চেষ্টা করেছি উত্তরটি কেবল অদৃশ্য হয়ে গেছে বলে মনে হচ্ছে (সম্ভবত এটি লিনাক্স প্রম্পটে এটি প্রিন্ট করার চেষ্টা করছে তবে বাশ স্ক্রিপ্টের মধ্যে নয়)

আমি মনে করি read_until ফাংশনটি ব্যবহার করে এটি সন্ধান করুন : প্রশ্নের শেষে কাজ করতে পারে।

পরামর্শ?






paramiko