ฉันจะดีบักสคริปต์ python จากบรรทัดคำสั่งโดยใช้ PyCharm ได้อย่างไร

ฉันต้องการดีบักสคริปต์ Python ที่รับอาร์กิวเมนต์บรรทัดคำสั่งหลายรายการ เช่น

myscript.py --input1 ./dir/file1.txt --input2 ./dir/file2.txt

ใน Pycharm ฉันทราบว่าฉันสามารถใช้ Run/Debug Configuration เพื่อเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งได้ อย่างไรก็ตามผมรู้สึกว่ามันค่อนข้างยุ่งยากเพราะต้องเปิดเมนูทุกครั้งที่ต้องการแก้ไขข้อโต้แย้ง นอกจากนี้ ไม่มีการเติมชื่อไฟล์ให้สมบูรณ์เมื่อระบุไฟล์เป็นอาร์กิวเมนต์

ฉันอยากจะเรียก myscript.py จากเชลล์โปรดของฉัน โดยที่ฉันกรอกชื่อไฟล์ให้สมบูรณ์ ฯลฯ แต่ยังคงใช้ PyCharm ดีบักเกอร์กับสคริปต์นั้น


person Gregor Sturm    schedule 08.01.2016    source แหล่งที่มา
comment
คุณมีความคิดอย่างไรเกี่ยวกับการรับข้อโต้แย้งจากโค้ดของคุณ ฉันหมายถึงพยายามหาข้อโต้แย้งหลังจากเรียกใช้สคริปต์ ชอบ raw_input   -  person kia    schedule 08.01.2016
comment
คุณควรเรียนรู้วิธีแก้ไขข้อบกพร่องโค้ดของคุณโดยใช้การทดสอบหน่วย แทนที่จะเรียกใช้สคริปต์พร้อมอาร์กิวเมนต์ คุณควรใช้ฟังก์ชัน do_awesome_work(input1, input2) และเขียนกรณีทดสอบด้วยอินพุตที่เหมาะสม จากนั้นคุณสามารถเรียกใช้กรณีทดสอบภายใต้ดีบักเกอร์ PyCharm ได้อย่างง่ายดาย   -  person awesoon    schedule 08.01.2016
comment
มีเหตุผลใดที่คุณพยายามทำเช่นนี้? หากคุณกำลังพยายามดีบักด้วยอินพุตหลายอินพุต อาจคุ้มค่ากับการดีบักเคสเดียวและทดสอบหน่วยอื่น หากคุณจำเป็นต้องแก้ไขข้อบกพร่องหลายกรณีด้วยเหตุผลบางอย่าง คุณอาจต้องการเลี่ยงอาร์กิวเมนต์สำหรับการดีบักนั้น ตั้งค่าเป็นตัวแปร และทดสอบว่าอาร์กิวเมนต์บรรทัดคำสั่งทำงานแยกกัน   -  person Daniel Underwood    schedule 08.01.2016


คำตอบ (1)


คำตอบสั้นๆ: Tools> Attach to Process...

คำตอบยาว:

  1. วางบรรทัดต่อไปนี้ไว้ที่ตำแหน่งแรกของโค้ดของคุณ

    input("press Enter to continue")
    
  2. เปิดตัวรหัสของคุณในเชลล์

    myscript.py --input1 ./dir/file1.txt --input2 ./dir/file2.txt
    
  3. เปิด Pycharm และใช้เพื่อเปิด myscript.py ของคุณ ตั้งค่า break points ไว้ที่ใดก็ได้ที่คุณต้องการแก้ไขข้อบกพร่อง เลือก Tools> Attach to Process... และเลือกกระบวนการที่ myscript.py กำลังทำงานอยู่

  4. กลับมาที่เปลือกของ myscript.py แล้วกด Enter

ปัญหาที่คุณอาจได้รับ: ptrace ไม่ได้รับอนุญาตให้ทำอะไรบางอย่าง

สารละลาย:

sudo su
echo 0 > /proc/sys/kernel/yama/ptrace_scope

หรือคุณสามารถตั้งค่า 0 โดยตรง

/etc/sysctl.d/10-ptrace.conf
person dragon2fly    schedule 08.01.2016
comment
ฉันเชื่อว่าในเวอร์ชันปัจจุบันจะอยู่ภายใต้ Run > Attach to Local Processes... - person AuHau; 08.08.2018