在pdb模式下运行shell命令

问题描述 投票:0回答:3

我想在 python 调试器中运行

cd
ls
。我尝试使用
!ls
但我得到了

(Pdb) !ls
*** NameError: name 'ls' is not defined
python shell pdb
3个回答
13
投票

只需使用“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")


4
投票
不幸的是,PDB 不允许您运行 shell 命令。您看到错误的原因是 PDB 允许您检查变量名称或使用

!

 运行一行代码片段。引用文档:

[!]statement


在当前堆栈帧的上下文中执行(一行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。要设置全局变量,可以在同一行的赋值命令前加上全局命令的前缀,例如:

(Pdb) global list_options; list_options = ['-l'] (Pdb)

因此

!ls

 的意思是“打印 
ls
 的值”,这会导致您观察到的 NameError。


2
投票
PDB 的工作方式与普通的 python 控制台非常相似,因此可以像通常在 python 交互式会话中一样导入和使用包。

关于目录列表,您应该使用

os 模块(在 PDB 内,用 return 又名确认每一行。回车键;)):

from os import listdir os.listdir("/path/to/your/folder")
或者,如果您想做一些更高级的事情,例如启动新进程或捕获输出等,您需要查看 

subprocess 模块。

© www.soinside.com 2019 - 2024. All rights reserved.