0

在 cmd 窗口中运行时,sp​​awn 命令工作正常,但如果在虚拟环境中,它会永远挂起。

这有效

C:\Users\csullivan\Documents\Projects\netlog>python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from wexpect import spawn
>>> spawn("cmd.exe")
<wexpect.host.SpawnPipe object at 0x0000019F7040DBB0>
>>>

但这不会从 spawn 返回。

(env) C:\Users\csullivan\Documents\Projects\netlog>python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from wexpect import spawn
>>> spawn("cmd.exe")

如果软件版本相同,我预计或至少希望在 Python 虚拟环境中具有相同的行为,它们确实如此。

环境

  • Microsoft Windows 10 专业版 10.0.19043 内部版本 19043
  • 戴尔 Latitude 7490
  • 蟒蛇 3.9.5
  • 我们期待 4.0.0

virtualenv从一个可能相关的地方运行有什么特别之处吗?unittest我开始这个练习是为了使用 using测试一个交互式 C 程序subprocess,它一直有效,直到我需要与它进行实际交互。然后我尝试了pexpect。至少没有挂起,Popen_spawn但后来尽管使用timeout=1了读取。

如果这不起作用,是否可能有一个具有类似功能或足以为命令窗口或直接与应用程序提供读/写功能的 C API?

4

1 回答 1

0

这是. _ wexpect最初仅报告 与对齐的venv一些更改已触发问题,尽管行为并不相同。尽管有一个建议补丁,但我已经能够通过直接使用并将其与线程相结合来实现我的目标,尽管有一些令人讨厌的怪癖。virtualenvvenvsubprocess

于 2021-07-15T11:54:43.457 回答