2013-05-05 109 views
0

我想用SSH作爲另一臺機器的socks代理,然後詢問用戶是否要繼續。 所以我用:轉移stdin當從另一臺機器ssh到另一臺機器

proxy_cmd = "ssh -o 'StrictHostKeyChecking no' -i " + key_filename + ' -D 9998 [email protected]' + ip_address  
subprocess.Popen(proxy_cmd, shell=True, stdout=subprocess.PIPE) 

if not raw_input('would you like to proceed?(y)')=='y': 
    sys.exit() 

,我也得到:

IOError: [Errno 11] Resource temporarily unavailable 

我想那是因爲SSH是開放的,它是捕捉標準輸入或東西。我只是不知道如何繞過這個(我不需要發送輸入到ssh,我只是想讓它打開以供Selenium使用) 我該怎麼做?

回答

1

如果你想保持stdin提供給您的Python程序,那麼你就必須重定向stdinssh過程,即使你有沒有使用它的意圖,用類似...

subprocess.Popen(proxy_cmd, 
       shell=True, 
       stdin=subprocess.PIPE, 
       stdout=subprocess.PIPE) 

請注意,subprocess模塊將保留Popen對象在subprocess._active列表中的引用,但您可能還想將生成的Popen對象綁定到變​​量,以便您稍後可以對其執行操作。

+0

謝謝!它的作用就像一種魅力。 – eran 2013-05-05 10:40:03

相關問題