Python在ssh上卡住了

3

我正在尝试直接通过ssh运行Python脚本,如下所示:

ssh hostname python_script

很遗憾,Python 启动后什么也没有发生,事实上,在我断开 SSH 连接之后,在远程创建的 Python 进程仍然“活着”。如果我尝试启动 Python 解释器,同样的情况也会发生,但其他命令可以正常运行。


2
你的 Python 脚本是做什么的? - Florin Stingaciu
这个 Python 脚本是做什么的?它是否会干扰任何 stdio?在本地执行时是否能够无问题运行? - tMC
它使用pyinotify来监视用户登录和注销机器。在本地和远程(从Bash运行时)工作正常,但是当直接通过SSH启动时也不会工作,Python解释器shell也是如此。除了向stdout写入内容外,我没有触及流。 - chpatrick
如果你想监视用户的登录和退出,为什么要使用inotify?为什么不使用syslog?让机器在人们登录/退出时向你发送消息,而不是通过ssh在其上运行代理。 - tMC
3个回答

7

尝试使用ssh -t 主机名 python脚本。默认情况下,当ssh给定一个要运行的程序时,它不会分配一个伪终端进行交互(但如果您只是执行ssh 主机名,则会分配);-t告诉它这样做。


1

ssh -t是一个不错的建议。

你也可以尝试在你的代码中添加打印语句/函数,写入到/var/tmp或其他文件中,以查看它正在做什么。

另一种查看进程正在执行的方式是使用类似于Linux的strace: http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html

例如:ssh remote.host.com 'strace -f -o /var/tmp/my_script.strace my_script'。然后检查/var/tmp/my_script.strace以查看它所卡住的地方。阅读strace输出并不总是简单的,但至少很有趣。 :)


0

SSH不会导致运行Python脚本出现问题。一般要注意的是环境变量的更改和对标准输入/输出的任何期望,因为这些可能会导致类似于您描述的症状。如果不运行脚本,直接运行Python将挂起,因为Python希望能够与stdin/stdout交互。

测试基本环境是否正常工作的简单方法是创建一个测试程序(test.py),其中包含:

print "foo"

那么

ssh hostname python test.py

你应该得到 "foo" 作为响应。


这个可以运行,但是我的脚本仍然没有输出任何内容。如果我的程序是由登录shell启动的,inotify会在意吗? - chpatrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接