我无法与Popen创建的子进程交互

0 投票
1 回答
542 浏览
提问于 2025-04-16 10:42

我在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

你的代码:

  1. 启动了 STxP70.bat 文件。
  2. 向它的标准输入写入字符串 "gdb"(没有换行符),然后关闭标准输入。
  3. 读取它的输出,直到文件结束。PID.communicate 不允许你再与这个子进程互动——它会写入你提供的字符串,然后收集所有输出,直到这个进程结束。
  4. 当 STxP70.bat 完成时,子进程也就结束了。

需要注意的是,如果“shell 会打开”意味着会弹出一个新窗口,里面有一个命令提示符,那你就麻烦了。这意味着 STxP70.bat 是用 'start' 命令启动的,而你无法与这个窗口进行交流,因为它没有继承你的标准输入/输出/错误输出管道。你需要自己修改这个批处理文件,不要使用 'start' 命令。

.

撰写回答