远程执行互相关联的comment时需要对返回值进行空调用

  1. 目的
    通过python,使用秘钥,以SSH方式连接Linux服务器,并执行服务器上的shell脚本
  2. 代码
	from time import sleep

	import paramiko

	ssh = paramiko.SSHClient()  # 创建SSH对象
	
	
	def conSub():  # 连接sub 稼动shell
    	command = "cd /tmp;srcGrep.sh -key '*****' /tmp/AB"
    	ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 允许连接不在know_hosts文件中的主机
    	pKey = paramiko.RSAKey.from_private_key_file('******', password='******')  # 声明密匙位置以及密码
    	ssh.connect(hostname='*****', port='**', username='****', password='****',pkey=pKey)  # 连接服务器
    	stdin, stdout, stderr = ssh.exec_command(command)  # 执行命令1并获取命令结果(初次生成查询过程)
    	result = stdout.read()  # 获取返回值(查询过程)
    	resultFile = str(result).split('srcGrepResult.')[1][:14]  # 获取 生成的查询结果 文件名
    	print(resultFile)
    	stdin2, stdout2, stderr2 = ssh.exec_command(result)  # 执行 根据命令1的返回值 加工后的命令2
     	stdout2.read()  # 虽然会降低一定的效率 但是这个是保证命令2执行结束才会执行命令3
    	command3 = 'copySource srcGrepResult.{}'.format(resultFile)  # 根据命令1的返回值 生成命令3
    	# sleep(1)  # 服务器写入文件需要一定时间需要等待服务器查询完成 ↑的↑是本条语句的上位替代
    	download(command3)
    	print(result)
    	print(str(result)[2:len(str(result))-3])
    	print(stdout2.read())


		def download(command3):
    		ssh.exec_command(str(command3))  # 执行命令3并获取命令结果(source检索结果下载)


		if __name__ == '__main__':
    		conSub()
  1. 总结
    如果连接sub目的为执行多条相关语句(即后续语句需要用到前面语句的执行结果【非返回值】),需要sleep一定时间或者空调用一次返回值。
    在本次的例子中表现为三条comment,第一条通过shell生成查询过程(同时定义了查询结果文件名),第二条执行查询过程,第三条通过查询过程生成的文件下载source。由于第一次的comment的返回值中已经定义了文件名,所以第三条comment仅仅只是调用了第一条comment的返回值,并没有等待第二条comment的执行完成,这样会导致命令的空执行(即文件未写入完成就执行了操作),down下来的source会为空。
    空调用一次返回值即可保证comment3一定在comment2执行结束后执行,避免comment的空执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值