【问题标题】:Send commands to the opened python terminal向打开的 python 终端发送命令
【发布时间】:2025-04-14 05:45:01
【问题描述】:

目标是打开python终端并预先执行一些命令。在现实生活中它会加载一些模块并定义一些变量,但这里有一个简化版本:

from subprocess import Popen, CREATE_NEW_CONSOLE

r=Popen("python",creationflags=CREATE_NEW_CONSOLE)
r.communicate(input=b"print(2+2)")

使用 CREATE_NEW_CONSOLE,否则终端窗口不会出现(我从 IDE 运行代码)。上面的代码打开了一个 python 终端窗口,但输入没有到达那里。尝试一些变化会阻止窗口出现,例如:

r=Popen(["python","print(2+2)"],creationflags=CREATE_NEW_CONSOLE)

或者

r=Popen("python",creationflags=CREATE_NEW_CONSOLE, stdin=PIPE)
r.communicate(input=b"print(2+2)")

那么可以做些什么来解决这个问题呢?

【问题讨论】:

  • 嗯,第二个和第三个示例打开和关闭的速度非常快。您是否尝试将某些内容通过管道传输到标准输入,但也将标准输入连接到终端?
  • 如果我理解你的问题,主要思想是在不关闭窗口的情况下远程启动多个命令到终端。以上所有都试图实现这一目标。
  • 我什至无法让C:/msys64/usr/bin/cat.exe 以这种方式使用 Popen 将其标准输入复制到控制台。我强烈怀疑我链接的问题是相关的。
  • 这是否意味着可以以某种方式更改 STARTUPINFO 以接受来自通信方法的输入?无论如何,幸运的是,接受的答案以更简单的方式完成了我想要的。

标签: python windows python-3.x terminal


【解决方案1】:

这就是环境变量PYTHONSTARTUP 的用途...

见:https://docs.python.org/2/using/cmdline.html#envvar-PYTHONSTARTUP

另一种选择是使用 -c -i 开关

C:\>python -i -c "x = 2+2;y=3+3"
>>> x
4
>>> y
6
>>>

【讨论】: