2014-10-20 17 views
12

Tôi đang cố gỡ lỗi ứng dụng Python sử dụng các đối tượng psutil.Popen. Khi tôi bắt đầu một tiến trình con, PyCharm thay thế dòng lệnh của tôi với những điều sau đây:Gỡ lỗi các quy trình con Popen bằng PyCharm

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

mà kết thúc trong một lỗi:

python.exe: Import by filename is not supported. 

Khi tôi khởi động lệnh tương tự mà không -m tùy chọn, tất cả mọi thứ có vẻ là khỏe. Có cách nào tôi có thể thay đổi lệnh khởi chạy trình gỡ rối của PyCharm không?

tôi đã cập nhật lên PyCharm Community Edition 4.0.3 và lệnh debugger mới trông giống như:

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

nơi -c-f là đối số dòng lệnh mô-đun của tôi. Lệnh khởi chạy trình gỡ rối đã thay đổi, nhưng nó không giải quyết được vấn đề; Tôi vẫn gặp lỗi Import by filename is not supported.

Ví dụ mã có sẵn here at Bitbucket.org. cấu hình chạy Pycharm của sẽ giống như thế:

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

Đây là một khó khăn. Tôi phải nhìn thêm. –

+0

Làm thế nào để '' trông như thế nào? Nó chỉ là một tên hoặc đường dẫn đầy đủ? Nếu đó là đường dẫn đầy đủ, hãy thử thay đổi nó thành chỉ tên và đảm bảo thư mục gốc nằm trong 'sys.path'. So sánh với http://stackoverflow.com/questions/14465473/ –

+0

Đối mặt với cùng một vấn đề với Community Edition 3.4 (và ngày phát triển python thứ 2 của tôi). Bất cứ ai có thể bình luận nếu nó làm việc với các phiên bản trước bao giờ? – Prabhjot

Trả lời

9

Như Piotr đã đề cập, PyCharm 'Đính kèm để trình con tự động trong khi gỡ lỗi'. Nếu subprocess là một quá trình Python, trình gỡ lỗi PyCharm thay đổi các đối số khởi động của quá trình (xem hàm patch_args tại source). Khi bạn bắt đầu tiến trình con theo cách này:

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

Lệnh khởi động thực tế cũng giống như:

python.exe -m "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0.3\helpers\pydev\pydevd.py" 
--multiproc --client 127.0.0.1 --port 62661 
--file pycharm-multiprocess-debug 

Vì vậy, nó đã đi sai. Có một số cách giải quyết tôi có thể tìm thấy:

  1. Cách đơn giản nhất, nếu bạn không cần phải gỡ rối tiến trình con, chỉ cần tắt "Đính kèm để trình con tự động trong khi gỡ lỗi" bên PyCharm cài đặt

  2. thay đổi args của bạn tới:

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

    Bất lợi là bạn chỉ có thể chạy tệp Python chứ không phải mô-đun Python.

  3. Tôi khuyên bạn nên là giải pháp cuối cùng cho Python subprocess:

    from multiprocessing import Process 
    
    def server(): 
        p = Process(target=worker) 
        p.start() 
        print 'worker pid: {}'.format(p.pid) 
        p.join() 
    
+0

Giải pháp thứ hai giải quyết được vấn đề. –

+0

nơi tôi nên viết mã đó ?? args = ['python', '__main__.py', 'worker'] –

+0

@MARCO, 'args' nằm trong mẫu mã của Ivan: https://bitbucket.org/lgyanf/pycharm-multiprocess-debug/src/ 973bebe2e1c249ff75f5db1e8ddaad0720a0dec5/__ main__.py?at=default – ZZY

Các vấn đề liên quan