Fabric: Fab2 рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЕрдЬреАрдм рдЗрдирдкреБрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ

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

рдлреИрдмреНрд░рд┐рдХ 1 рдореИрдиреБрдЕрд▓ рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлреИрдмреНрд░рд┐рдХ 2 рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдкреАрдЯреА рдХреЗ рдпрд╛ рдмрд┐рдирд╛ред

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

# contents of test_input.sh
# #!/bin/bash
# read -p "enter value: " var
# echo "you entered $var"

# Fabric 1 handled input correctly
>>> run("~/test_input.sh")
[riskapp.comm.equabank.loc] run: ~/test_input.sh
[riskapp.comm.equabank.loc] Login password for 'user':
[riskapp.comm.equabank.loc] out: enter value: foo # typed "foo" ENTER
[riskapp.comm.equabank.loc] out: you entered foo
[riskapp.comm.equabank.loc] out:

'enter value: foo\r\nyou entered foo'

# Fabric 2 without pty doesn't show prompt and behaves strange, must hit enter twice to finish command
>>> c = Connection(SERVER, connect_kwargs={"password": PASSWORD})
>>> c.run("~/test_input.sh")
bar # typed "bar" ENTER
bar # only "b" appeared, the rest after another ENTER


you entered bar
<Result cmd='~/test_input.sh' exited=0>

# Fabric 2 with pty shows prompt but input behavior is still strange, still must hit enter twice
>>> c.run("~/test_input.sh", pty=True)
enter value: baz  # typed "baz" ENTER
b  # another ENTER
az

you entered baz
<Result cmd='~/test_input.sh' exited=0>

# Fabric 2 automatic response works ok with pty
>>> c.run("~/test_input.sh", pty=True, watchers=[Responder(pattern="enter value", response="foo\n")])
enter value: foo
you entered foo
<Result cmd='~/test_input.sh' exited=0>

рдХрдкрдбрд╝реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ 7 64b рдкрд░ cmd, рдкрд╛рдпрдерди 3.7 64b рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛:
рдлреИрдмреНрд░рд┐рдХ 3 1.14.рдкреЛрд╕реНрдЯ 1, рдлреИрдмреНрд░рд┐рдХ 2.3.1, рдкреИрд░рд╛рдорд┐рдХреЛ 2.4.1, рдЗрдирд╡реЛрдХ 1.1.1

Bug Needs investigation Nonstandard platforms

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣рд╛рдВ 1.2 рд╕реЗ 1.3 рд╡реЗрд░рд┐рдпрди рдореЗрдВ рдЗрдирд╡реЛрдХ рдХрд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
https://github.com/pyinvoke/invoke/issues/654

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

рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕реНрд╡рдпрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рджрд┐рдиреЛрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП _should_ рд╡рд╣рд╛рдВ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╕рд╡рд╛рд▓ рдПрдХ рдФрд░ рдЯрд┐рдХрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ - рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рд╣реИ? рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ (рд▓реЗрдХрд┐рди рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рд▓рдХреНрд╖рдг рд╕реЗ рдЕрд▓рдЧ) рдХреА рд╕реВрдЪрдирд╛ рджреАред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╛рдпрдерди 3.5.3 рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдЖрдЬрдорд╛рдпрд╛ рдФрд░ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рдпрд╣ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛:

>>> c.run("~/test_input.sh")
asv  # i typed "asv" ENTER
asv  # another ENTER
you entered asv

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<decorator-gen-3>", line 2, in run
  File "C:\Python35\lib\site-packages\fabric2\connection.py", line 30, in opens
    return method(self, *args, **kwargs)
  File "C:\Python35\lib\site-packages\fabric2\connection.py", line 702, in run
    return self._run(self._remote_runner(), command, **kwargs)
  File "C:\Python35\lib\site-packages\invoke\context.py", line 101, in _run
    return runner.run(command, **kwargs)
  File "C:\Python35\lib\site-packages\invoke\runners.py", line 271, in run
    return self._run_body(command, **kwargs)
  File "C:\Python35\lib\site-packages\invoke\runners.py", line 365, in _run_body
    raise ThreadException(thread_exceptions)
invoke.exceptions.ThreadException:
Saw 1 exceptions within threads (OSError):

Thread args: {'kwargs': {'echo': None,
            'input_': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='cp852'>,
            'output': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp852'>},
 'target': <bound method Runner.handle_stdin of <fabric2.runners.Remote object at 0x000001BF0189C908>>}

Traceback (most recent call last):
  File "C:\Python35\lib\site-packages\invoke\util.py", line 233, in run
    super(ExceptionHandlingThread, self).run()
  File "C:\Python35\lib\threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Python35\lib\site-packages\invoke\runners.py", line 648, in handle_stdin
    self.write_proc_stdin(data)
  File "C:\Python35\lib\site-packages\invoke\runners.py", line 784, in write_proc_stdin
    self._write_proc_stdin(data.encode(self.encoding))
  File "C:\Python35\lib\site-packages\fabric2\runners.py", line 69, in _write_proc_stdin
    return self.channel.sendall(data)
  File "C:\Python35\lib\site-packages\paramiko\channel.py", line 846, in sendall
    sent = self.send(s)
  File "C:\Python35\lib\site-packages\paramiko\channel.py", line 801, in send
    return self._send(s, m)
  File "C:\Python35\lib\site-packages\paramiko\channel.py", line 1180, in _send
    raise socket.error("Socket is closed")

OSError: Socket is closed

рдирдорд╕реНрддреЗ,

рдЙрд╕ рдкрд░ рдХреЛрдИ рдлрд┐рдХреНрд╕ред рдЬреИрд╕рд╛ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред

2019-08-07 11: 31: 30,590 - vm-1.0-GA-x86_64- рдиреНрдпреВрдирддрдо-рдЯреЗрдореНрдкрд▓реЗрдЯ-1.0-Update-917-1565202528 - рд╕реВрдЪрдирд╛ - рдирд┐рд╖реНрдкрд╛рджрди [рд╕реАрдбреА / рд░реВрдЯ || рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ $ ;; mkdir -m 777 -p / mnt / рд╕рд╛рдЭрд╛ -1565202528]
рдЧрд╡рд╛рд╣реА: {'рдкрд░реАрдХреНрд╖рдг': [{'test_catagory': 'рдЙрдиреНрдирдпрди', 'test_json': 'runlists / upgrade.json', 'рдкреНрд░рд╛рдердорд┐рдХрддрд╛': 'P0'}]}
рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "harness.py", рдкрдВрдХреНрддрд┐ 395, рдореЗрдВ
рдореБрдЦреНрдп()
рдлрд╝рд╛рдЗрд▓ "harness.py", рдкрдВрдХреНрддрд┐ 392, рдореБрдЦреНрдп рдореЗрдВ
sys.exit (harness.start_run ())
рдлрд╝рд╛рдЗрд▓ "harness.py", line 59, start_run рдореЗрдВ
result_map = self.run ()
рдлрд╝рд╛рдЗрд▓ "harness.py", рд▓рд╛рдЗрди 84, рд░рди рдореЗрдВ
result_map [рдкрд░реАрдХреНрд╖рдг ['test_catagory']] = self.run_tests (рдкрд░реАрдХреНрд╖рдг)
рдлрд╝рд╛рдЗрд▓ "harness.py", рдкрдВрдХреНрддрд┐ 127, run_tests рдореЗрдВ
self.mount_storage_on_vm (vm_object)
рдлрд╝рд╛рдЗрд▓ "harness.py", рдкрдВрдХреНрддрд┐ 241, Mount_storage_on_vm рдореЗрдВ
"mkdir -m 777 -p% s"% (self.log_location))ред return_code ==:
рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/photools/runner/guest.py", рдкрдВрдХреНрддрд┐ 36 in run_with_cd
рд╡рд╛рдкрд╕реА conn.run ( "рд╕реАрдбреА {} || рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ $ ?; {}"ред рдкреНрд░рд╛рд░реВрдк (рдЙрджреНрдзрд░рдг (dir), рдЖрджреЗрд╢), * args)рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/photools/runner/vm.py", рдкрдВрдХреНрддрд┐ 242 _pre_run рдореЗрдВрд╡рд╛рдкрд╕реА _orig_run (рдХрдорд╛рдВрдб, * kwargs)
рдлрд╝рд╛рдЗрд▓ "", рд▓рд╛рдЗрди 2, рд░рди рдореЗрдВ
рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/fabric-connection.py", рдкрдВрдХреНрддрд┐ 30, рдЦреЛрд▓рддрд╛ рд╣реИ
рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐ (рд╕реНрд╡рдпрдВ, args, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/fabric-connection.py", рдкрдВрдХреНрддрд┐ 702, рд░рди рдореЗрдВ
рд╡рд╛рдкрд╕реА self._run (self._remote_runner (), рдЖрджреЗрд╢, * kwargs)рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke-context.py", рд▓рд╛рдЗрди 101, _run рдореЗрдВрд╡рд╛рдкрд╕реА рдзрд╛рд╡рдХ.рд░реБрдг (рдХрдорд╛рди, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke-runners.py", рд▓рд╛рдЗрди 291, рд░рди рдореЗрдВ
рд╕реНрд╡ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рдлрд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke-runners.py", рдкрдВрдХреНрддрд┐ 399, _run_body рдореЗрдВ
рдереНрд░реЗрдбрдПрдХреНрд╕рд╕реЗрдкреНрд╢рди (рдереНрд░реЗрдб_рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди) рдмрдврд╝рд╛рдПрдВ
invoke.exception.ThreadException:
рдзрд╛рдЧреЗ рдХреЗ рднреАрддрд░ рджреЗрдЦрд╛ 1 рдЕрдкрд╡рд╛рдж (NotImplementedError):

рдереНрд░реЗрдб рдЖрд░реНрдЧреНрд╕: {'рдХрд╡рд░реНрд╕': {'рдЗрдХреЛ': рдХреЛрдИ рдирд╣реАрдВ,
'input_': <_io.textiowrapper i = "44">,
'рдЖрдЙрдЯрдкреБрдЯ': <_io.textiowrapper i = "46">},
'рд▓рдХреНрд╖реНрдп':>}

рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):

рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke/util.py", рд▓рд╛рдЗрди 233, рд░рди рдореЗрдВ
рд╕реБрдкрд░ (рдЕрдкрд╡рд╛рджрд╣реИрдВрдбрд▓рд┐рдВрдЧрдереНрд░реЗрдб, рд╕реНрд╡) .run ()

рдлрд╝рд╛рдЗрд▓ "/usr/lib/python3.6/threading.py", рдкрдВрдХреНрддрд┐ 864, рд░рди рдореЗрдВ
self._target ( self._args, * self._kwargs)

рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke-runners.py", рдкрдВрдХреНрддрд┐ 706, handle_stdin рдореЗрдВ
self.close_proc_stdin ()

рдлрд╝рд╛рдЗрд▓ "/root/workspace/upgrad-test-CI-in-harness/update-basic-in-harness/.venv/lib/python3.6/site-packages/invoke-runners.py", рд▓рд╛рдЗрди 939, рдХрд░реАрдм_рдкреНрд░реЛрд╕реНрдХ_рд╕реНрдЯреАрди рдореЗрдВ
NotImplementedError рдмрдврд╝рд╛рдПрдБ

NotImplementedError

2019/08/07 рдХреЛ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ

def ssh_login_target_nas():
    """ Use ssh to login the target NAS 

        return 
            type: <class 'fabric.connection.Connection'>
    """
    # Set up fabric's login information
    host = SSH_ACCOUNT + "@" + SELF_NAS_IP_ADDRESS              
    # Connect to your nas
    c = Connection(host = host, connect_kwargs={"password": SSH_ACCOUNT_PASSWORD})
    try:
        hostname = c.run('hostname').stdout.strip()
        logger.debug("Connect to NAS: " + hostname)
    except Exception, error:
        logger.error(error)
        raise SystemExit
    return c

рдореИрдВ stdout рд╕реЗ рд╣реЛрд╕реНрдЯрдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдиреАрдЪреЗ рдХреА рддрд░рд╣ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛ред

05:57:13 [ERROR] - 2019-08-08 05:58:17,108 - auto_update: ssh_login_target_nas 54   - 
05:57:13 Saw 1 exceptions within threads (NotImplementedError):
05:57:13 
05:57:13 
05:57:13 Thread args: {'kwargs': {'echo': None,
05:57:13             'input_': <open file '<stdin>', mode 'r' at 0x7fbf8f39b0c0>,
05:57:13             'output': <open file '<stdout>', mode 'w' at 0x7fbf8f39b150>},
05:57:13  'target': <bound method Remote.handle_stdin of <fabric.runners.Remote object at 0x7fbf8c6d3e10>>}
05:57:13 
05:57:13 Traceback (most recent call last):
05:57:13 
05:57:13   File "/home/vagrant/workspace/qsirch-v4.1-ui-autotester-chrome/qpkg-update/uenv/local/lib/python2.7/site-packages/invoke/util.py", line 233, in run
05:57:13     super(ExceptionHandlingThread, self).run()
05:57:13 
05:57:13   File "/usr/lib/python2.7/threading.py", line 754, in run
05:57:13     self.__target(*self.__args, **self.__kwargs)
05:57:13 
05:57:13   File "/home/vagrant/workspace/qsirch-v4.1-ui-autotester-chrome/qpkg-update/uenv/local/lib/python2.7/site-packages/invoke/runners.py", line 706, in handle_stdin
05:57:13     self.close_proc_stdin()
05:57:13 
05:57:13   File "/home/vagrant/workspace/qsirch-v4.1-ui-autotester-chrome/qpkg-update/uenv/local/lib/python2.7/site-packages/invoke/runners.py", line 939, in close_proc_stdin
05:57:13     raise NotImplementedError
05:57:13 
05:57:13 NotImplementedError

рдореЗрд░реА рд╕рд╛рдордЧреНрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рддрд░рд╣ред рдиреАрдЪреЗ рдХреА рддрд░рд╣:

requests==2.11.1
fabric==2.4.0
xmltodict

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ 2019/08/07 рд╕реЗ pip install -r requirements.txt рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛ред

2019/08/06ред

Successfully installed asn1crypto-0.24.0 bcrypt-3.1.7 cffi-1.12.3 cryptography-2.7 enum34-1.1.6 fabric-2.4.0 invoke-1.2.0 ipaddress-1.0.22 paramiko-2.6.0 pycparser-2.19 pynacl-1.3.0 requests-2.11.1 six-1.12.0 xmltodict-0.12.0

2019/08/07ред

Successfully installed asn1crypto-0.24.0 bcrypt-3.1.7 cffi-1.12.3 cryptography-2.7 enum34-1.1.6 fabric-2.4.0 invoke-1.3.0 ipaddress-1.0.22 paramiko-2.6.0 pycparser-2.19 pynacl-1.3.0 requests-2.11.1 six-1.12.0 xmltodict-0.12.0

рдЗрдирд╡реЛрдХ рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрд▓рдЧ рд╣реИред

рдпрд╣рд╛рдВ 1.2 рд╕реЗ 1.3 рд╡реЗрд░рд┐рдпрди рдореЗрдВ рдЗрдирд╡реЛрдХ рдХрд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
https://github.com/pyinvoke/invoke/issues/654

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ @baconYao , рдпрд╣ рдореБрдЭреЗ рднреА рд░реЛрдХ рд░рд╣рд╛ рдерд╛ред рдЕрдм 1.2 рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдЕрдкрдЧреНрд░реЗрдб рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкрд┐рдЫрд▓реЗ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреАред

рдпрд╣рд╛рдБ рдЙрд╕реА рдкрд░, рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдкреНрд░реЗрд╕ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдп рдореЗрдВ, рдореБрдЭреЗ рд╕реЙрдХреЗрдЯ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

Saw 1 exceptions within threads (OSError):

Thread args: {'kwargs': {'echo': None,
            'input_': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>,
            'output': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>},
 'target': <bound method Runner.handle_stdin of <fabric.runners.Remote object at 0x7fcad97aeed0>>}

Traceback (most recent call last):

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/invoke/util.py", line 233, in run
    super(ExceptionHandlingThread, self).run()

  File "/usr/lib64/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/invoke/runners.py", line 694, in handle_stdin
    self.write_proc_stdin(data)

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/invoke/runners.py", line 832, in write_proc_stdin
    self._write_proc_stdin(data.encode(self.encoding))

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/fabric/runners.py", line 67, in _write_proc_stdin
    return self.channel.sendall(data)

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/paramiko/channel.py", line 846, in sendall
    sent = self.send(s)

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/paramiko/channel.py", line 801, in send
    return self._send(s, m)

  File "/home/ds/.local/share/virtualenvs/port_error_histogram-BRcAd8l-/lib/python3.7/site-packages/paramiko/channel.py", line 1198, in _send
    raise socket.error("Socket is closed")

OSError: Socket is closed

рдореБрдЭреЗ 2.4.0 рдХреЗ рд╕рд╛рде рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВ рдПрдХ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрджрд░ рдлреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ 2.5.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдпрд╛ рдбрдмреНрд▓реВрдПрд╕рдПрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рднреА рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд╡реАрдирддрдо рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдирд╡реАрдирддрдо рдЙрдмрдВрдЯреВ рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдерд╛, рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред
рдХрдкрдбрд╝реЗ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдпрд╛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдирд╛ рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рдирд╣реАрдВ рдерд╛ред

рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ, рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рдкрд░ рднреА рдХрд╛рдо рдХрд┐рдпрд╛, рдХреЗрд╡рд▓ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдХрд╛рд░реНрдп (рдХрдИ рд░рди () рдХрдорд╛рдВрдб) рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдЕрд░реНрдерд╛рдд, рдХреБрдЫ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рджред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкрд╛ рд╕рдХрд╛ред

рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдкрд░, рдпрд╣ рд░рд┐рд╕реНрдкреЛрдВрдбрд░ рд╢реНрд░реЗрдгреА рд╕реЗ рднреА рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рддреНрд╡рд░рд┐рдд (.rr) рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░ "рд╣рд╛рдВ" рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрддрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рд╕рд╛рджрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ "рд╣рд╛рдБ | рдж-рдХрдорд╛рдВрдб" рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп WSL рдкрд░ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред

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

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

TimotheeJeannin picture TimotheeJeannin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

jamesob picture jamesob  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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