运行.py文件直到指定的行号

时间:2015-04-27 13:20:14

标签: python terminal

在linux终端输入

python script.py 

将运行run script.py并退出python控制台,但如果我只想运行脚本的一部分并让控制台保持打开状态呢?例如,运行script.py直到第15行并让控制台保持打开状态以进一步编写脚本。我该怎么做?

让我们说它可能,然后控制台仍然打开并且script.py一直运行到第15行,然后我可以从控制台内部调用来自其他py文件的行碎片吗?

...类似

python script.py 15 #(opens script and runs lines 1-15 and leaves console open)

然后打开控制台,我想从anotherscript.py

开始第25-42行
>15 lines of python code run from script.py 
> run('anotherscript.py', lines = 25-42)
> print "I'm so happy the console is still open so I can script some  more")
I'm so happy the console is still open so I can script some  more
>

4 个答案:

答案 0 :(得分:17)

您最好的选择可能是pdbPython debugger。您可以在pdb下启动脚本,在第15行设置断点,然后运行脚本。

python -m pdb script.py
b 15                       # <-- Set breakpoint on line 15
c                          # "continue" -> run your program
# will break on line 15

然后,您可以检查变量并调用函数。从Python 3.2开始,您还可以使用interact中的pdb命令在当前执行点获取常规Python shell!

如果这符合您的账单并且您也喜欢IPython,那么您可以查看IPdb,这比普通的pdb好一点,然后将您带入interact的IPython shell。

答案 1 :(得分:2)

如果您想从script.py行运行a到行b,只需使用此bash代码段:

cat script.py|head -{a+b}|tail -{b-a}|python -i

{a+b}{b-a}替换为其值

答案 2 :(得分:1)

您可以使用python -i选项在脚本末尾打开控制台。

它允许您的脚本运行直到它退出,然后您可以检查变量,调用任何函数和任何Python代码,包括导入和使用其他模块。

当然,您的脚本需要先退出,或者最后退出,或者,如果您的目标是调试脚本的那一部分,您可以在需要的地方添加sys.exit()或os._exit()调用停止(如你的第15行)。

例如:

import os
print "Script starting"
a=1
def f(x):
    return x

print "Exiting on line 8"
os._exit(0) # to avoid the standard SystemExit exception 

print "Code continuing"

用法示例:

python -i test_exit.py
Scrit starting
Exiting on line 8
>>> print a
1
>>> f(4)
4
>>>

答案 3 :(得分:-1)

您无法直接执行此操作,但您可以使用exec从Python控制台(或IDLE)内部执行类似操作:

  • 打开你最喜欢的Python控制台
  • 将想要的行加载到字符串中并执行它们:

    script = 'script.py'
    txt = ''
    with open(script) as sc:
        for i, line in enumerate(sc):
            if i >= begline and i<= endline:
            txt = txt + line
    exec(txt)
    

您甚至可以根据该代码编写自己的部分脚本运行器...

修改

我必须承认,仅凭上述答案确实值得贬低。它在技术上是正确的,可能是最符合你要求的那个。但我应该警告你,这是不好的实践。依靠行号加载源文件很容易出错,除非你真的知道自己在做什么以及为什么这样做,否则你应该避免使用它。 Python调试器至少允许您控制要执行的行。

如果您真的必须使用此解决方案,请务必始终打印并仔细检查您要执行的行。恕我直言,在像IDLE这样的IDE中复制和过去行总是更简单,更安全,它被打包到任何标准的Python安装中。