我正在尝试直接在 ssh 上运行 python 脚本,如下所示:
ssh hostname python_script
不幸的是,python 启动后什么都没有发生,事实上,即使在我与 SSH 断开连接后,远程创建的 python 进程仍保持“活动”状态。如果我尝试启动 python 解释器,也会发生同样的事情,但其他命令工作正常。
试试ssh -t hostname python_script
。默认情况下,ssh
在给定程序运行时不会分配要与之交互的伪 tty(尽管如果您只是这样做的话ssh hostname
);-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”作为回应。