Ошибка subprocess.check_output с сокетом ssh - PullRequest
0 голосов
/ 17 марта 2019

Я не понимаю, почему работает следующий код:

cmd = ["ssh" , "-S", "/tmp/mysocks.ssh", "myserver", "ifconfig eth0"]
subprocess.call(cmd)

, возвращающий

0

и отображающий

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::7d88:e75b:98d5:90fe  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ce:50:2d  txqueuelen 1000  (Ethernet)
        RX packets 4117012  bytes 3887724393 (3.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1847275  bytes 156158720 (148.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

во время сбоя одного и того же вызова с check_outputиз-за разорванного канала:

cmd = ["ssh" , "-S", "/tmp/mysocks.ssh", "myserver", "ifconfig eth0"]
subprocess.check_output(cmd)

Вызов, заблокированный перед возвратом, и вывод не отображаются (кроме сообщения отладки ssh при использовании с -vvvv. При отладке я заметил следующую ошибку:

debug3: mux_client_read_packet: read header failed: Broken pipe

Однако это сообщение об ошибке, отображаемое ssh с параметром "-vvvv", также присутствует в subprocess.call, хотя это не мешает возврату.

Есть идеи? Мне нужно получитьвывод команды, но не с subprocess.call.

...