У меня странная проблема с pysftp.Мой код создает текстовый файл, а затем почти немедленно передает его на сервер SFTP с помощью библиотеки pysftp.Текстовый файл, который создается и затем передается, сохраняется в папке Dropbox.
Периодически я получаю ошибки «Errno [2] File Not not» »в push-части кода.Похоже, что созданный файл иногда не доступен достаточно быстро для следующей части кода, и я подозреваю, что это может быть связано с задержкой Dropbox.Я мог бы поставить часть EXISTS, чтобы подождать, но хотел проверить правильность моих подозрений, прежде чем продолжить?Просто немного странно, что этот код работает нормально в 90% случаев.
Код ниже с *** вместо учетных данных:
def get_sec_info(bb_req_dir,bb_req_name,bb_firmname,sec_missing):
#Build request file and return the filepath
filepath = bb_req_file(bb_req_dir,bb_req_name,bb_firmname,sec_missing)
#Send the file to Bloomberg, wait and download response file. Returns the filename of the response file.
dir_response = bb_upload_download(filepath,bb_req_name)
df_secs = parse_response(dir_response)
return df_secs
def bb_req_file(bb_req_dir,bb_req_name,bb_firmname,sec_missing):
#Build req file
filepath = bb_req_dir + bb_req_name + '.req'
req_file = open(filepath,'w+')
with req_file:
req_file.write('START-OF-FILE')
req_file.write('\n')
req_file.write('FIRMNAME=' + bb_firmname)
req_file.write('\n')
req_file.write('FILETYPE=pc')
req_file.write('\n')
req_file.write('REPLYFILENAME=' + bb_req_name + '.out')
req_file.write('\n')
req_file.write('SECMASTER=yes')
req_file.write('\n')
req_file.write('DATEFORMAT=ddmmyyyy')
req_file.write('\n')
req_file.write('PROGRAMNAME=getdata')
req_file.write('\n')
req_file.write('PROGRAMFLAG=adhoc')
req_file.write('\n')
req_file.write('MIFIR=yes')
req_file.write('\n')
#Add the fields being requested
req_file.write('START-OF-FIELDS')
req_file.write('\n')
req_file.write('CFI_CODE')
req_file.write('\n')
req_file.write('END-OF-FIELDS')
req_file.write('\n')
#Add the securities
req_file.write('START-OF-DATA')
req_file.write('\n')
for sec in sec_missing:
req_file.write(''.join(sec))
req_file.write(' |Ticker|')
req_file.write('\n')
#Close
req_file.write('END-OF-DATA')
req_file.write('\n')
req_file.write('END-OF-FILE')
req_file.close()
return filepath
def bb_upload_download(filepath,bb_req_name):
warnings.filterwarnings('ignore','.*hostkeys')
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
with pysftp.Connection('****', username='****', password='****', cnopts=cnopts) as sftp:
sftp.put(filepath)
response = filepath[:-3] + 'out'
file_response = bb_req_name + '.out'
exists = False
while exists == False:
exists = sftp.isfile(file_response)
sftp.get(file_response,response)
return response
Andy