Я не понимаю, почему работает следующий код:
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.