我无法与Popen创建的子进程交互
我在Windows XP上使用Python 2.5。
我正在用subprocess模块来运行我的命令行,现在我想知道如何在命令行中通过subprocess来运行gdb。
我的代码是:
PID = subprocess.Popen('C:/STM/STxP70_Toolset_2010.2/bin/STxP70.bat', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).
现在命令行会打开,接下来如果我尝试通过
PID.communicate("gdb")来运行gdb,
但是“gdb”并没有在命令行中运行。
我该怎么做才能让它运行呢?
1 个回答
1
你的代码:
- 启动了 STxP70.bat 文件。
- 向它的标准输入写入字符串 "gdb"(没有换行符),然后关闭标准输入。
- 读取它的输出,直到文件结束。PID.communicate 不允许你再与这个子进程互动——它会写入你提供的字符串,然后收集所有输出,直到这个进程结束。
- 当 STxP70.bat 完成时,子进程也就结束了。
需要注意的是,如果“shell 会打开”意味着会弹出一个新窗口,里面有一个命令提示符,那你就麻烦了。这意味着 STxP70.bat 是用 'start' 命令启动的,而你无法与这个窗口进行交流,因为它没有继承你的标准输入/输出/错误输出管道。你需要自己修改这个批处理文件,不要使用 'start' 命令。
.