我想運行一個python腳本直接通過SSH這樣的:的Python籠罩着SSH
ssh hostname python_script
遺憾的是沒有什麼蟒蛇開始後發生的,而事實上創建的Python進程遠程保持「活「即使我從SSH斷開連接。如果我嘗試啓動python解釋器,同樣的事情發生,但其他命令工作正常。
我想運行一個python腳本直接通過SSH這樣的:的Python籠罩着SSH
ssh hostname python_script
遺憾的是沒有什麼蟒蛇開始後發生的,而事實上創建的Python進程遠程保持「活「即使我從SSH斷開連接。如果我嘗試啓動python解釋器,同樣的事情發生,但其他命令工作正常。
嘗試ssh -t hostname python_script
。默認情況下,ssh
在給定程序運行時不會分配僞tty進行交互(儘管如果你只是做ssh hostname
); -t
告訴它這樣做。
這解決了它,謝謝。 – 2012-08-17 09:39:32
SSH不會導致運行python腳本時出現問題。一般來說,要注意的是環境變量的變化以及對標準輸入/輸出的任何期望,因爲這些可能導致與您所描述的相似的症狀。如果不運行腳本,直接運行python會掛起,因爲python希望能夠與stdin/stdout交互。
一個簡單的方法來測試,基本的環境工作是創建一個包含一個測試程序(test.py):
print "foo"
然後
ssh hostname python test.py
你應該得到「福」爲一個迴應。
雖然有效,但我的腳本仍然不輸出任何內容。如果我的程序是由登錄shell啓動的話,會否注意到? – 2012-08-16 17:21:11
ssh -t是一個很好的建議。
您也可以嘗試在代碼中打印print語句/函數,寫入/ var/tmp中的某個文件或其他任何文件,以查看它在做什麼。
看到的另一種方式是什麼進程正在做的是使用類似Linux的使用strace: http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html
EG:SSH remote.host.com'strace的-f -o /var/tmp/my_script.strace my_script」。然後檢查/var/tmp/my_script.strace,看看它卡住了什麼。閱讀strace輸出並不總是很簡單,但至少很有趣。 :)
你的Python腳本是做什麼的? – 2012-08-16 17:12:18
這個python_script是做什麼的?它是否與任何一個工作室混淆?在本地執行時運行沒有問題嗎? – tMC 2012-08-16 17:12:33
它使用pyinotify來觀看用戶登錄和註銷機器。它可以在本地和遠程(從Bash運行時)正常工作,但不是在直接由SSH啓動時運行,Python解釋器shell也不是。除了寫入標準輸出之外,我不會觸及流。 – 2012-08-16 17:15:28