我想在python调试器中运行ls
和!ls
。我尝试使用{{1}},但我得到了
*** NameError:name' ls'未定义
答案 0 :(得分:1)
遗憾的是,PDB不允许您运行shell命令。您看到错误的原因是PDB允许您检查变量名称或使用!
运行单行代码段。引用文档:
[!]statement
在当前堆栈帧的上下文中执行(一行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。要设置全局变量,可以在赋值命令的前面加上同一行的全局命令,例如:
(Pdb) global list_options; list_options = ['-l'] (Pdb)
因此!ls
表示“打印ls
”的值,这会导致您观察到的NameError。
答案 1 :(得分:1)
只需使用“ os”模块,您就可以轻松地从pdb中执行任何os命令。
开始于:
(Pdb) import os
然后:
(Pdb) os.system("ls")
甚至
(Pdb) os.system("sh")
最新版本只是生成一个子外壳。退出后返回调试器。
注意:“ cd”命令在用作 os.system(“ cd dir”)时将无效,因为它不会更改python进程的cwd。为此使用 os.chdir(“ / path / to / targetdir ”)。
答案 2 :(得分:0)
在全能Google中有很多关于此的信息。
虽然要这样做,但您应该使用os模块:
from os import listdir
os.listdir("/path/to/your/folder")
或者如果你想做一些更高级的东西,比如启动新进程或捕获输出等,你需要查看subprocess模块。