Fabric: c. рд╕реНрдерд╛рдиреАрдп рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдо рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕реА рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдо рдкреИрджрд╛ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдордИ 2018  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: fabric/fabric

рдЯреНрд░рд╛рдВрд╕рдлрд░.рдкреБрдЯ () рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдпрд╛ рддреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ (рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ), рдпрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдкрде рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреВрд░реНрд╡ (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ remote рдкрде рдореЗрдВ рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

c.put('myfiles.tgz', '/opt/mydata')

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ ( c.put('file.txt', '/home/me/dir') , рддреЛ рдореИрдВ рд╣рдореЗрд╢рд╛ IOError: Failure рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ local рдкрде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕реА рд╡рд╕реНрддреБ рдереА рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВред

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ paramiko.transport.sftp.sftp._log: [chan 0] open('/home/me/dir', 'wb') рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рд╕рдорд╛рдзрд╛рди рд╣рдореЗрд╢рд╛ рдкреВрд░реНрдг рдкрде рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

c.put('file.txt', '/home/me/dir/file.txt')

рд▓реЗрдХрд┐рди рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред

рдЕрдВрдд рдореЗрдВ, $HOME рдХреЛ рдкреВрд░реНрдг рдкрде рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрджрд░реНрд╢ рд╕реЗ рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА #1653 рд╣реИ

  • рд╡рд┐рдВрдбреЛрдЬ 10 . рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛
  • рдХрдкрдбрд╝рд╛ 2.0.0
  • рдкреИрд░рд╛рдорд┐рдХреЛ 2.4.1
  • 1.0.0 . рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ
Bug Wart put()/get()

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? Connection.put рд╕рд╛рде remote рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ IOError рдЙрдард╛рддреА рд╣реИред

(рдлреИрдмреНрд░рд┐рдХ рдПрдЯ рдЕрд▓ рдкрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдзрдиреНрдпрд╡рд╛рдж!)

рдХрдкрдбрд╝рд╛ 2.1.3
рдкреИрд░рд╛рдорд┐рдХреЛ 2.4.1
1.0.0 . рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ

рдПрдХ рдХрд╛рдиреВрдиреА рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдмрд╛рдж рдореЗрдВ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдЧрд╛ред рдкреИрдЪ (рдФрд░ рдкрд░реАрдХреНрд╖рдг! рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА рдкрд╛рд╕ рд╣реИрдВ :( рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ ...) рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдПрдлрдПрд▓рдУ рдХреА рдзрд╛рд░рдгрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд╣реА рд░рд┐рдореЛрдЯ рдкрде рдордВрдЧрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕реАрдзреА рдХрдореА рд╣реИ - рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдПрд╕рдПрдлрдЯреАрдкреА рд╕рд░реНрд╡рд░ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмреЗрд╕рдирд╛рдо рдкрд░ рджреВрд░рд╕реНрде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрде рдкрд░ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдпред

рдлреИрдмреНрд░рд┐рдХ рдХреЗ рдЕрдВрдд рд╕реЗ рдЖрдВрд╢рд┐рдХ рдбрд┐рдмрдЧ рд▓реЙрдЧ:

invoke.transfer.put: Massaged relative local path 'setup.py' into '/Users/jforcier/Code/oss/fabric/setup.py'
invoke.transfer.put: Uploading '/Users/jforcier/Code/oss/fabric/setup.py' to '/Users/jforcier/tmp/'
paramiko.transport.sftp.sftp._log: [chan 2] open(b'/Users/jforcier/tmp/', 'wb')

рдлрд┐рд░ рдЯреНрд░реЗрд╕рдмреИрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрде рдХреЛ sftp_client.py рдореЗрдВ CMD_OPEN рдореЗрдВ рдлреЗрдВрдХ рд░рд╣реЗ рд╣реИрдВ:

t, msg = self._request(CMD_OPEN, filename, imode, attrblock)

рдЬреЛ рдЕрдВрддрддрдГ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓/рд╡рд░реНрдЧ рдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрд╕рдПрдлрдЯреАрдкреА рд╕рд░реНрд╡рд░ рдиреЗ рдЖрдИрдУ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд╣рд╛ рдерд╛ (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл "рд╡рд┐рдлрд▓рддрд╛" рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИ ... AFAIK рдпрд╣ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдХреА рдЧрд▓рддреА рд╣реИред)


рд╡реИрд╕реЗ рднреА, рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рддрд░реНрдХ рд╣реИ рдЙрдлрд╝ (рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдо _were_ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рд╕рдВрд▓рдЧреНрди рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдзрд╛ рдЧрд╛рдпрдм рдЯреБрдХрдбрд╝рд╛ред

рдареАрдХ рд╣реИ, рдирд╣реАрдВ, рд╕рднреА рдордВрдЧрд┐рдВрдЧ рдЦрд╛рд▓реА рдпрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рджреВрд░рд╕реНрде рдкрдереЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ, рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рд╣реВрдВ, рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдлрдПрд▓рдУ рдХреЛ рднреА рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рд░рд┐рдореЛрдЯ рдкрде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред

v1 рдореЗрдВ, рд╣рдордиреЗ FLOs рдХреА .name рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рджреЗрдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Python FLO API рдХрд╛

рд╡реИрд╕реЗ рднреА, рддреЛ рдпрд╣рд╛рдВ v2 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ "рд╡рд╛рд╣ рдЕрд░реЗ рдЖрдкрдХреЛ рдЗрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓ рдкрде рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"ред рд╢рд╛рдпрдж рджреЛрдиреЛрдВ, рдЪреВрдВрдХрд┐ рд╕рднреА рдПрдлрдПрд▓рдУ рдХреЗ рдкрд╛рд╕ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡реИрд╕реЗ рднреА рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред

рдареАрдХ рд╣реИ, рдпрд╣ рд╕рдм рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд▓реЗ рдмрдЧрдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ ЁЯОЙ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zhaoguixu picture zhaoguixu  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

shadyabhi picture shadyabhi  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Grazfather picture Grazfather  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jmcgrath207 picture jmcgrath207  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amezin picture amezin  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ