2012-08-16 38 views
3

我想運行一個python腳本直接通過SSH這樣的:的Python籠罩着SSH

ssh hostname python_script 

遺憾的是沒有什麼蟒蛇開始後發生的,而事實上創建的Python進程遠程保持「活「即使我從SSH斷開連接。如果我嘗試啓動python解釋器,同樣的事情發生,但其他命令工作正常。

+2

你的Python腳本是做什麼的? – 2012-08-16 17:12:18

+0

這個python_script是做什麼的?它是否與任何一個工作室混淆?在本地執行時運行沒有問題嗎? – tMC 2012-08-16 17:12:33

+0

它使用pyinotify來觀看用戶登錄和註銷機器。它可以在本地和遠程(從Bash運行時)正常工作,但不是在直接由SSH啓動時運行,Python解釋器shell也不是。除了寫入標準輸出之外,我不會觸及流。 – 2012-08-16 17:15:28

回答

7

嘗試ssh -t hostname python_script。默認情況下,ssh在給定程序運行時不會分配僞tty進行交互(儘管如果你只是做ssh hostname); -t告訴它這樣做。

+0

這解決了它,謝謝。 – 2012-08-17 09:39:32

0

SSH不會導致運行python腳本時出現問題。一般來說,要注意的是環境變量的變化以及對標準輸入/輸出的任何期望,因爲這些可能導致與您所描述的相似的症狀。如果不運行腳本,直接運行python會掛起,因爲python希望能夠與stdin/stdout交互。

一個簡單的方法來測試,基本的環境工作是創建一個包含一個測試程序(test.py):

print "foo" 

然後

ssh hostname python test.py 

你應該得到「福」爲一個迴應。

+0

雖然有效,但我的腳本仍然不輸出任何內容。如果我的程序是由登錄shell啓動的話,會否注意到? – 2012-08-16 17:21:11

1

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輸出並不總是很簡單,但至少很有趣。 :)