用终端传入参数调试Python脚本

9

我有一个Python脚本,可以通过终端(bash,Mac OSX)输入参数并运行。

python test.py arg1 arg2

有没有一种好的方法在不编辑包含import pdbpdb.set_trace()代码的情况下以调试模式运行相同的脚本?

例如,如果我正在使用iPython控制台,则可以通过以下方式执行此操作:

%run -d test.py arg1 arg2

这很简单,不是吗?如果想在终端实现同样的功能,我认为以下命令可能行得通,但实际上并没有:

python -c "import pdb; import sys; sys.argv = ['test.py', arg1, arg2];pdb.run('test.py')"

代码使用参数运行正常,但在pdb的调试模式下无法运行。这是因为调试模式很难做到吗?我应该继续使用pdb.set_trace或iPython的%run -d吗?
3个回答

12

尝试:

python -m pdb test.py arg1 arg2

运行 python -m pdb 会以脚本的形式运行 pdb。如果 test.py 不在当前工作目录而是在路径中,可以使用此方法代替:

python -m pdb "$(which test.py)" arg1 arg2

现在,我在阅读很多次的文档中找到了这个语法的描述! - Kouichi C. Nakamura

2
在Spyder IDE(2.3.4)中调试带有输入参数的Python脚本:
  1. 运行 > 配置...
  2. 选择运行配置 > (选择已打开的脚本)
  3. 通用设置> 命令行选项: arg1 arg2 arg3 (使用空格作为分隔符,就像在命令行中一样)
  4. 工作目录: (选择文件夹)
  5. 单击 确定
然后从菜单中选择 调试. 这相当于在Spyder中的iPython控制台中执行以下操作。
debugfile('/Users/xxx/xxx/test.py', args='arg1 arg2', wdir='/Users/xxx/xxx/')

使用PyCharm也是类似的。

  1. 运行 > 编辑配置
  2. 从菜单中选择Python脚本
  3. 打开Configuration面板
  4. 脚本参数arg1 arg2

然后运行 > 调试 > 选择文件。

在iPyhton控制台中,您也可以尝试以下操作(假设test.py在当前文件夹中):

%run -d test.py arg1 arg2

0

假设你有以下代码

for i in range(200):
    print i

您可以通过添加代码来开始调试

pdb.set_trace()

例子

import pdb
pdb.set_trace()
for i in range(200):
    print i

代码将会在此处中断

pdb.set_trace()

一旦代码停止,您可以使用pdb命令进行调试。 请参阅https://docs.python.org/2/library/pdb.html#debugger以获取pdb命令。


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