0

所以我在 ipython 中使用 exec() 函数。我制作了这个函数 hardshell(),它在循环中执行来自终端输入的命令。

我的目标是创建一个可以执行各种命令的循环,除了仅在特定退出命令“shellbreak”的帮助下退出循环

在进行了一些实验之后,出现了一个奇怪的行为,其中不仅退出了循环,而且 ipython 本身也退出了。我设法重现了这种情况,但是如果我遗漏了一些命令,这似乎与 ipython 的崩溃没有任何关系

这是来自我的 ipython 控制台的代码:

In [7]: def hardshell():
   ...:     while True:
   ...:         try:
   ...:             command = input()
   ...:             if command == 'shellbreak':
   ...:                 return
   ...:             exec(command)
   ...:         except Exception as e:
   ...:             print(e)
   ...:         except:
   ...:             print("\nnope")
   ...:

In [8]: hardshell()


print(4)
4
print(help)
Type help() for interactive help, or help(object) for help about object.

33
exit
exit()
open("temp.py","w+")
f = open("temp.py","w+")
print(f)
<_io.TextIOWrapper name='temp.py' mode='w+' encoding='UTF-8'>
f.write_line("import math")
'_io.TextIOWrapper' object has no attribute 'write_line'
f.write("import math")
f.read()
print(f.read())


f.close()
f = open("temp.py","r")
print(f.read())
import math
shellbreak
(base) ➜  v.2 ipython

所以我想知道打开和关闭文件“temp.py”的哪一部分可能与ipython在这里崩溃有关,特别是如果可以在没有退出短语“shellbreak”的情况下退出循环

4

0 回答 0