在Paramiko中,如何将列表或字典传递到exec_command
并将结果保存到列表或字典?
我需要在exec_command之间使用sleep
。
命令不是顺序执行的,而是以1、2、1的顺序执行。
stdin, stdout, stderr = ssh.exec_command(d.values()[0])
reuslt1 = stdout.read()
stdin, stdout, stderr = ssh.exec_command(d.values()[1])
reuslt2 = stdout.read()
stdin, stdout, stderr = ssh.exec_command(d.values()[0])
reuslt3 = stdout.read()
如果上述没有两个问题,我已经尝试过map()
,它工作正常。
cmd = ['xxx', 'xxx']
def func(cmd):
stdin, stdout, stderr= ssh.exec_command(cmd)
result = stdout.read()
return result
list(map(func, cmd))
我的问题是我需要对远程Linux进行SSH,替换文件中的字符串。
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, username, password)
command = {
"search" : "grep$img_name ='string' file",
"modify" : "sed -i 's/$img_name = $now/$img_name = $word/g' file",
}
stdin, stdout, stderr = ssh.exec_command(command.values()[0])
before = stdout.read()
sleep(1) ##If I don't add the wait, I will grep the string twice before the modification.
ssh.exec_command(command.values()[1])
sleep(1)
stdin, stdout, stderr = ssh.exec_command(command.values()[0])
after = stdout.read() ##Confirm that my modification was successful
ssh.close()
我不想重复编码stdin, stdout, stderr = ssh.exec_command()
。
答案 0 :(得分:0)
我相信您正在寻找的是string interpolation。
所以在Python 3中:
<!--
<span>Box Total (all parts): </span><span id="grandtotal"></span>
--> <!-- DON'T DO THIS -->
<span>Box Total (all parts): {{totalBoxCount}}</span>
关于<!--
<button type="button" class="btn" @click="totalBoxes">Total Boxes</button>
--> <!-- DELETE -->
:click
不仅读取命令输出。作为读取输出的副作用,它等待命令完成。由于您没有为// App.vue
export default {
methods: {
// totalBoxes: function() { /* .. */ } // DELETE THIS
}
}
调用for key, value in command.items():
stdin, stdout, stderr = ssh.exec_command(value)
results[key] = stdout.read()
,因此不必等待它完成。因此,实际上,上面的sleep
循环也应该解决该问题,因为它等待所有命令(包括stdout.read()
)完成。