我正在编写一个使用Jsch在远程计算机上运行一些shell指令的jython代码。我需要等待一个特定的shell指令完成后再继续在我的本地机器上执行jython代码(=需要在远程机器上同步shell代码)。
为此,当特定shell指令完成时,我在远程机器中创建一个文本文件。然后在我的jython代码中打开一个sftp通道并定期尝试获取文件(使用sftp.exception和"同时为true"循环)。代码等到文件下载完毕。
我的问题是,即使创建文件,jsch函数" get"没有设法下载文件并继续发送" sftp.exception:没有这样的文件或目录"那让我陷入无限循环。
这是我的代码:
#We generate the info files for each class of the classlist
for classname in classlist:
print ("Generating information file (format : .out) for the class %s " % (classname))
#We open a shell channel and run the commands "windchill shell" and then "InfoReport.sh classname".
channel_generate = gl_session.openChannel('shell')
ops = channel_generate.getOutputStream()
ps = PrintStream(ops, True)
channel_generate.connect()
ps.println("windchill shell")
ps.println('rm ' + self.wt_home + '/tmp/' + classname + '.txt')
#The following instruction is the one i need to synchronize
ps.println(self.wt_home + '/bin/' + self.command + " " + classname)
#I create a file to detect the end of the previous instruction
ps.println('echo ok > ' + self.wt_home + '/tmp/' + classname)
ps.println('exit')
ps.close()
#Here we wait until the synchro file is created.
#We connect an sftp server and test every 4 seconds if we can retrieve the file.
channel_synchro = gl_session.openChannel('ftp')
channel_synchro.connect()
#This loop is broken when the get is successful
while True:
try:
channel_synchro.get(self.wt_home + '/tmp/' + classname,'/home/dev/temp')
break
except jsch.SftpException:
time.sleep(4)
#Disconnect and close de sftp channel
channel_synchro.disconnect()
channel_synchro.close()
#Disconnect and close the shell channel
channel_generate.disconnect()
channel_generate.close()
我尝试了不同的解决方案:其他类型的循环,在"的每次迭代中创建一个新的通道;而真正的"循环,我已经考虑过用户权限问题,我已检查路径是否准确,他们是,我已检查我的机器的sftp功能是否工作,它的工作原理。 什么都行不通,我仍然无法解决这个问题