Jsch sftp异常:找不到文件(即使文件存在)

时间:2014-06-12 15:13:42

标签: java python shell jython jsch

我正在编写一个使用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功能是否工作,它的工作原理。 什么都行不通,我仍然无法解决这个问题

0 个答案:

没有答案