Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pdb模式下运行shell命令_Python_Shell_Pdb - Fatal编程技术网

Python 在pdb模式下运行shell命令

Python 在pdb模式下运行shell命令,python,shell,pdb,Python,Shell,Pdb,我想在python调试器中运行cd和ls。我尝试使用!ls但我得到了 ***NameError:未定义名称“ls” 《全能者》中有很多关于这方面的信息 尽管要做到这一点,您应该使用模块: 或者,若你们想做一些更高级的事情,比如启动新流程或捕获输出等,你们需要看看这个模块 不幸的是,PDB不允许您运行shell命令。您看到错误的原因是PDB允许您使用检查变量名或运行单行代码段。从文件中引用: [!]语句 在当前堆栈帧的上下文中执行(一行)语句。感叹号可以省略,除非语句的第一个单词类似于调试器命令。

我想在python调试器中运行
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)