0
我需要具備的功能基本上可以模擬用戶創建一個用ssh進行端口刷新的功能。所以,基本上這應該是這樣的: - 執行ssh -f -N -L 10000:gateway:11000 localhost
- 如果有從該命令的輸出,顯示給用戶和泵用戶的輸入作爲迴應 - 完成 下面的代碼,幾乎做到了什麼我需要:python subprocess.Popen和ssh在後臺進行端口轉發
ssh_proc = Popen(['ssh', '-f', '-N', '-L', '10000:gateway:11000', 'localhost'], stdin=PIPE, stdout=PIPE)
stdoutdata, stderrdata = ssh_proc.communicate()
但問題是它永遠不會結束。我看到命令被執行並且創建了轉發隧道,但通信()仍然卡住。我可以擺脫與按Ctrl + C和得到這個:
^CTraceback (most recent call last):
File "sshman.py", line 278, in <module>
add(args.remote_host, args.remote_port, args.local_port, args.local_host)
File "sshman.py", line 125, in add
stdoutdata, stderrdata = ssh_proc.communicate()
File "/usr/lib64/python2.7/subprocess.py", line 740, in communicate
return self._communicate(input)
File "/usr/lib64/python2.7/subprocess.py", line 1256, in _communicate
stdout, stderr = self._communicate_with_poll(input)
File "/usr/lib64/python2.7/subprocess.py", line 1310, in _communicate_with_poll
ready = poller.poll()
KeyboardInterrupt
由於我使用-f用SSH命令,就應該用叉子叉連接。有沒有辦法中斷溝通(),當它完成或有更優雅的解決方案?
預先感謝您的任何意見/建議/意見。
您是否嘗試過讓`ssh`子從你的進程繼承`stdin`和`stdout`(只是不指定`標準輸入=`或` stdout =`,iirc)和*不*調用`溝通`? – zwol 2011-02-12 00:09:21