python - تنفيذ أوامر متعددة في Paramiko بحيث تتأثر الأوامر من سابقاتها




shell ssh (2)

أحاول ببطء إعداد برنامج نصي بيثون لـ SSH ثم FTP للقيام ببعض الملفات اليدوية ، علي أن أقوم به طوال الوقت. أنا أستخدم Paramiko ويبدو أن الجلسة تعمل ، وتطبع الدليل ولكن يبدو أن أمر دليل التغيير لا يعمل ، فإنه يطبع الدليل الذي أبدأ فيه

/ 01 / الوطن /

import paramiko

hostname = ''
port = 22
username = ''
password = ''
#selecting PROD instance, changing to data directory, checking directory
command = {
    1:'ORACLE_SID=PROD',2:'cd /01/application/dataload',3:'pwd'
}

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)

for key,value in command.items():
    stdin,stdout,stderr=ssh.exec_command(value)
    outlines=stdout.readlines()
    result=''.join(outlines)
    print (result)
ssh.close()

حسنًا ، من خلال تجربة شيء ما ، تمكنت من معرفة ذلك ، أعتقد ذلك. تحتاج إلى القيام بجميع الأوامر في وقت واحد ولا تحتاج إلى القيام بها في حلقة. على سبيل المثال بلدي سيكون

import paramiko

hostname = ''
port = 22
username = ''
password = ''
#selecting PROD instance, changing to data directory, checking directory
command = 'ORACLE_SID=PROD;cd /01/application/dataload;pwd'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)
stdin,stdout,stderr=ssh.exec_command(value)
outlines=stdout.readlines()
result=''.join(outlines)
print (result)
ssh.close()

عند تشغيل exec_command عدة مرات ، يتم تنفيذ كل أمر في "shell" الخاص به. وبالتالي فإن الأوامر السابقة ليس لها أي تأثير على بيئة الأوامر التالية.

إذا كنت بحاجة إلى الأوامر السابقة للتأثير على الأوامر التالية ، فما عليك سوى استخدام بناء جملة مناسب لخادم shell. تستخدم معظم قذائف * nix فاصلة منقوطة أو علامة الضم المزدوجة (مع دلالات مختلفة) لتحديد قائمة بالأوامر. في حالتك ، يكون علامة الضم أكثر ملاءمة ، لأنه ينفذ الأوامر التالية ، فقط في حالة نجاح الأوامر السابقة:

stdin,stdout,stderr=ssh.exec_command("ORACLE_SID=PROD && cd /01/application/dataload && pwd")






paramiko