使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法能够解决。描述如下:

环境:windows,vscode,python3.11
目的:python自动化部署nodejs

cmd = "cnpm init"

1、正常调试到这一步
使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

2、读到挂起前一行
Press ^C at any time to quit.
准备读下一行
package name: (test2)这一行需要手动输入“回车”才能往下走。
使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

3、挂起。python subprocess.readline()读不到“回车”键,一直挂起。
使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

4、调式输入信息
使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

5、正常的运行情况,红圈部分都需要手动“回车”。
使用subprocess或ayncio开启进程,但某个进程中有多个一问一答,读总被是挂起,有什么办法处理

即使asyncio启用异步进程,也这种交互有没有办法,仍然挂起。
讨论数量: 1

看了几遍,还没有太理解问题,先简单回答一些可能性。挂起两个可能:

  • 标准输出没有 flush。交互式命令待输入时,光标在行尾,并没有换行,所以等不来想要的字符串;
  • 子进程输出时 pipline,如果子进程有大量输出,但父进程没有消费 stdout,缓冲区慢了就会阻塞子进程。不过你这个情况应该不是这个原因;

之前也写过很多这类脚本,有个简单办法,免得管道倒来倒去。就是直接写个临时文件,然后直接

os.system("some.exe < tmp.txt > log.txt")

如果想掌控力强一点,用 os.spawnvpe 拿到 pid 想干啥就干啥

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!