我正在尝试直接通过ssh运行Python脚本,如下所示:
ssh hostname python_script
很遗憾,Python 启动后什么也没有发生,事实上,在我断开 SSH 连接之后,在远程创建的 Python 进程仍然“活着”。如果我尝试启动 Python 解释器,同样的情况也会发生,但其他命令可以正常运行。
我正在尝试直接通过ssh运行Python脚本,如下所示:
ssh hostname python_script
很遗憾,Python 启动后什么也没有发生,事实上,在我断开 SSH 连接之后,在远程创建的 Python 进程仍然“活着”。如果我尝试启动 Python 解释器,同样的情况也会发生,但其他命令可以正常运行。
尝试使用ssh -t 主机名 python脚本
。默认情况下,当ssh
给定一个要运行的程序时,它不会分配一个伪终端进行交互(但如果您只是执行ssh 主机名
,则会分配);-t
告诉它这样做。
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输出并不总是简单的,但至少很有趣。 :)
SSH不会导致运行Python脚本出现问题。一般要注意的是环境变量的更改和对标准输入/输出的任何期望,因为这些可能会导致类似于您描述的症状。如果不运行脚本,直接运行Python将挂起,因为Python希望能够与stdin/stdout交互。
测试基本环境是否正常工作的简单方法是创建一个测试程序(test.py),其中包含:
print "foo"
那么
ssh hostname python test.py
你应该得到 "foo" 作为响应。