在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
>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
>
答案 0 :(得分:17)
您最好的选择可能是pdb
,Python 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)内部执行类似操作:
将想要的行加载到字符串中并执行它们:
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安装中。