在pdb模式下运行shell命令

时间:2016-01-27 16:02:03

标签: python shell pdb

我想在python调试器中运行ls!ls。我尝试使用{{1}},但我得到了

  

*** NameError:name' ls'未定义

3 个答案:

答案 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模块。