Python 在pdb模式下运行shell命令
我想在python调试器中运行Python 在pdb模式下运行shell命令,python,shell,pdb,Python,Shell,Pdb,我想在python调试器中运行cd和ls。我尝试使用!ls但我得到了 ***NameError:未定义名称“ls” 《全能者》中有很多关于这方面的信息 尽管要做到这一点,您应该使用模块: 或者,若你们想做一些更高级的事情,比如启动新流程或捕获输出等,你们需要看看这个模块 不幸的是,PDB不允许您运行shell命令。您看到错误的原因是PDB允许您使用检查变量名或运行单行代码段。从文件中引用: [!]语句 在当前堆栈帧的上下文中执行(一行)语句。感叹号可以省略,除非语句的第一个单词类似于调试器命令。
cd
和ls
。我尝试使用!ls
但我得到了
***NameError:未定义名称“ls”
《全能者》中有很多关于这方面的信息 尽管要做到这一点,您应该使用模块:
或者,若你们想做一些更高级的事情,比如启动新流程或捕获输出等,你们需要看看这个模块 不幸的是,PDB不允许您运行shell命令。您看到错误的原因是PDB允许您使用
检查变量名或运行单行代码段代码>。从文件中引用:
[!]语句
在当前堆栈帧的上下文中执行(一行)语句。感叹号可以省略,除非语句的第一个单词类似于调试器命令。要设置全局变量,可以在同一行中为赋值命令添加全局命令前缀,例如:
(Pdb) global list_options; list_options = ['-l']
(Pdb)
因此!ls
表示“打印ls
的值”,这会导致您观察到的名称错误。只需使用“os”模块,您就可以轻松地从pdb中执行任何os命令
首先:
(Pdb)导入操作系统
然后:
(Pdb)操作系统(“ls”)
甚至
(Pdb)操作系统(“sh”)
最新版本只会生成一个子shell。退出它将返回调试器
注意:“cd”命令在用作os.system(“cd dir”)时将无效,因为它不会更改python进程的cwd。使用os.chdir(“/path/to/targetdir”)来实现这一点。它不是操作系统外壳。如果要运行系统命令,请使用子流程模块;我认为这根本不能回答问题;这个问题是关于PDB的。
(Pdb) global list_options; list_options = ['-l']
(Pdb)