subprocess.check_output失败,套接字ssh

时间:2019-03-16 23:07:55

标签: python ssh subprocess pipe

我不明白为什么以下代码有效:

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)

不显示在返回和输出之前阻塞的呼叫(与“ -vvvv”一起使用时,除了ssh调试消息以外)。 调试时发现以下错误:

debug3: mux_client_read_packet: read header failed: Broken pipe

但是,ssh使用“ -vvvv”选项显示的错误消息也存在于subprocess.call中,尽管它不能阻止返回。

有什么主意吗?我需要检索命令输出,但不能与subprocess.call一起使用。

0 个答案:

没有答案