如何在PyCharm中进行远程调试

6
我现在面临的问题是:
  • 我通过SSH在远程主机上部署Python代码
  • 脚本需要传递一些参数,并且必须由特定用户运行
  • 我创建的PyCharm运行/调试配置通过不同的用户通过SSH连接(无法连接实际运行脚本的用户)
  • 我想通过PyCharm远程调试此代码…我已经完成所有配置,但只是遇到了权限错误。

有没有办法像sudo su - user这样以特定用户身份运行/调试脚本?

我已经阅读了关于在PyCharm的远程/调试配置中指定一些Python解释器选项的文章,但没有设法找到一个可行的解决方案。

2个回答

10
如果你想更容易和灵活地进入PyCharm调试器,不一定非要在PyCharm中有一个一键“播放”按钮,你可以使用调试服务器功能。我曾在运行某些Python代码不像运行python ...那么简单的情况下使用过这个功能。
有关详细信息,请参见Python调试服务器远程调试文档,但以下是大致工作方式的摘要:
  1. 上传并安装远程调试助手egg到您的服务器上(在OSX上,这些文件位于/Applications/PyCharm.app/Contents/debug-eggs
  2. 设置远程调试服务器运行配置:单击下拉运行配置菜单,选择编辑配置...,点击+按钮,选择Python远程调试
    • 输入的详细信息(有点令人困惑)告诉正在运行Python脚本的远程服务器如何连接到您的笔记本电脑的PyCharm实例。
    • Local host name设置为您笔记本电脑的IP地址
    • port设置为您笔记本电脑上任何可用的空闲端口(例如8888
  3. 现在按照对话框中的其余说明操作:将importpydevd.settrace(...)语句复制粘贴到您的代码中,具体位置取决于您想让代码“命中断点”的地方。这基本上是PyCharm等效于import pdb; pdb.set_trace()。确保更改后的代码与服务器同步。
  4. 点击bug按钮(播放按钮旁边;这会启动PyCharm调试服务器),并像通常一样运行Python脚本,在任何用户、环境等下运行。当命中断点时,PyCharm应该进入调试模式。

1
谢谢!我正在尝试设置这个,但是在第二步中,我应该设置远程服务器配置 - 如果我通过SSH隧道连接到远程节点,我该如何做?长话短说,当我使用“python <script> <arguments>”运行远程代码时,什么也没有发生,过了一会儿控制台就会打印出“错误:[Errno 111]连接被拒绝”的错误。 - Cata D
2
我在答案的第二步添加了一个小细节澄清。基本上,您需要确保远程服务器可以建立到您的笔记本电脑的TCP连接。如果您需要通过跳板机,则可以尝试设置“反向隧道”,例如使用ssh -L5555:<laptop IP>:5555 user@<jumphost>...,然后在第2步中输入跳板机的IP,并再次执行步骤3和4。然后,您的Python脚本应该连接到跳板机,跳板机应该将流量转发到您的笔记本电脑。我没有尝试过这个,但我认为它应该可以工作。我希望我正确地理解了你的问题。 - m01
谢谢你的所有帮助!这些信息真的很有用,但在我的当前设置中使其工作并不容易。基本上问题仍然是第二步,因为我在公司的VPN后面,所以无法在远程主机(集群中的主机)和我的笔记本电脑之间创建隧道……需要打开和转发端口等。这就是为什么我试图从PyCharm向远程主机解决问题的原因,唯一剩下的问题是让脚本由特定用户执行。 - Cata D
如果有人想从远程服务器连接到您的笔记本电脑,您可以使用ngrok tcp连接。 - Danoja Dias

0

我已经使用ssh RemoteForward打开,使其(终于)正常工作,如下所示:

ssh -R 5678:localhost:5678 user@<remotehost>

然后在此ssh会话中启动脚本。Python脚本主机必须连接到localhost:5678,当然您的本地PyCharm调试器必须监听5678(或您选择的任何端口)。


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