我想在 python 调试器中运行
cd
和 ls
。我尝试使用 !ls
但我得到了
(Pdb) !ls
*** NameError: name 'ls' is not defined
只需使用“os”模块,您就可以轻松地从 pdb 中执行任何 os 命令。
开始于:
(Pdb) import os
然后:
(Pdb) os.system("ls")
甚至
(Pdb) os.system("sh")
最新的只是产生一个子shell。退出后返回到调试器。
注意:当用作 os.system("cd dir") 时,“cd”命令将不起作用,因为它不会更改 python 进程的 cwd。使用 os.chdir("/path/to/targetdir") 。
!
运行一行代码片段。引用文档:
因此在当前堆栈帧的上下文中执行(一行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。要设置全局变量,可以在同一行的赋值命令前加上全局命令的前缀,例如:
[!]statement
(Pdb) global list_options; list_options = ['-l'] (Pdb)
!ls
的意思是“打印
ls
的值”,这会导致您观察到的 NameError。
关于目录列表,您应该使用
os 模块(在 PDB 内,用 return 又名确认每一行。回车键;)):
from os import listdir
os.listdir("/path/to/your/folder")
或者,如果您想做一些更高级的事情,例如启动新进程或捕获输出等,您需要查看 subprocess 模块。