gpt4 book ai didi

python - 在Paramiko中执行多个命令,以便命令受到其前任命令的影响

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:03 30 4
gpt4 key购买 nike

我正在慢慢尝试制作一个Python脚本到SSH然后FTP来执行一些我必须一直做的手动文件获取。我正在使用 Paramiko, session 似乎在命令,并打印目录,但我的更改目录命令似乎不起作用,它打印我开始的目录:/01/home/

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()

最佳答案

当您多次运行 exec_command 时,每个命令都会在其自己的“shell”中执行。所以前面的命令对后面命令的环境没有影响。

如果您需要前面的命令影响后面的命令,只需使用服务器 shell 的适当语法即可。大多数 *nix shell 使用分号或双 & 符号(具有不同的语义)来指定命令列表。在您的情况下,&符号更合适,因为仅当前面的命令成功时它才会执行以下命令:

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

在许多情况下,您甚至不需要使用多个命令。

例如,您可以在交互使用 shell 时执行以下操作,而不是执行此序列:

cd /path
ls

你可以这样做:

ls /path
<小时/>

另请参阅: How to get each dependent command execution output using Paramiko exec_command

<小时/>

强制警告:请勿单独使用 AutoAddPolicy – 您将失去针对 MITM attacks 的保护通过这样做。正确的解决方案请参见 Paramiko "Unknown Server"

关于python - 在Paramiko中执行多个命令,以便命令受到其前任命令的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901626/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com