我不明白为什么以下代码有效:
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一起使用。