用PyCharm调试Popen子进程

我试图调试一个使用psutil.Popen对象的Python应用程序。 当我启动一个子进程时,PyCharm将我的命令行替换为以下内容:

python -m pydevd.py --multiproc --client 127.0.0.1 --port 52581 --file <myapplication>

最终出现错误:

python.exe: Import by filename is not supported.

当我使用-m选项启动相同的命令时,一切似乎都没有问题。 有没有办法改变PyCharm的调试器启动命令?

我已经更新到PyCharm Community Edition 4.0.3,新的调试器命令如下所示:

python.exe "C:Program Files (x86)JetBrainsPyCharm Community Edition 4.0.3helperspydevpydevd.py" 
--multiproc --client 127.0.0.1 --port 62661 
--file __main__.py local -c local.yml -f input/11_12.xls

其中-c-f是我模块的命令行参数。 调试器启动命令已更改,但未解决问题; 我仍然得到Import by filename is not supported错误。

Bitbucket.org提供了一个代码示例。 Pycharm的运行配置应该如下所示:

Script:            __main__.py
Script parameters: server
Working directory: %path to the repository%

正如Piotr所说,PyCharm'在调试时自动附加到子流程'。 如果子进程是Python进程,则PyCharm调试器会更改进程的启动参数(请参阅源代码中的函数patch_args )。 当你用这种方式启动子进程时:

args = ['python',
        '-m', 'pycharm-multiprocess-debug',
        'worker']
worker = subprocess.Popen(args)

实际的启动命令如下所示:

python.exe -m "C:Program Files (x86)JetBrainsPyCharm Community Edition 4.0.3helperspydevpydevd.py"
--multiproc --client 127.0.0.1 --port 62661
--file pycharm-multiprocess-debug

所以它出错了。 我可以找到几种解决方法:

  • 最简单的方法,如果您不需要调试子进程,只需在PyCharm设置中关闭“调试时自动附加到子进程”

  • 将您的参数更改为:

    args = ['python', '__main__.py', 'worker']
    

    缺点是你只能运行一个Python文件,而不是Python模块。

  • 我推荐Python子进程的最后一个解决方案:

    from multiprocessing import Process
    
    def server():
        p = Process(target=worker)
        p.start()
        print 'worker pid: {}'.format(p.pid)
        p.join()
    
  • 链接地址: http://www.djcxy.com/p/44947.html

    上一篇: Debugging Popen subprocesses with PyCharm

    下一篇: Debugging JavaScript with Flask and PyCharm