完全模拟 cmd 的子进程

Subprocess to completely emulate a cmd

提问人:Ilai K 提问时间:10/22/2023 最后编辑:E_net4Ilai K 更新时间:10/23/2023 访问量:55

问:

我正在制作一个“测试和记录”程序来帮助提交我的家庭作业。 程序接收一个 .cs 文件,对其进行编译,然后接收程序在 exe 上尝试的测试(输入)列表。假设我们当前的程序 .exe 接受 3 个用户输入并输出总和。测试列表如下所示(有 1 个测试):

[
["5", "7", "10"]
]

我会在常规 CMD 中运行此测试,如下所示:

Enter number: 5
Enter another number: 7
Enter another number: 10
------
The sum: 22

程序应运行程序 .exe(不打开 cmd 窗口)并输入当前测试中的所有字符串,然后得到:Enter number: 5\nEnter number: 7\nEnter number: 10\n------\nSum: 22

(我需要该数据来生成类似 CMD 的图像来输出。

我尝试在子进程中使用 Popen 函数,然后使用 stdin.write 输入数据,最后我尝试使用 communicate() 获取输出。但它只向我展示了程序 .exe 的输出,而没有用户输入它自己,它也不包括 \n,因为在我的程序 .exe 中我使用了 Write() 而不是 WriteLine(),因此用户可以在与打印文本相同的行中输入。所以我得到了这个:Enter number: Enter another number: Enter another number: ------\nSum: 22

我无法更改EXE代码。

这怎么能做到?(运行命令,输入输入,在没有 cmd 窗口的情况下获取包括用户输入在内的结果)

python 输入 cmd 子进程 输出

评论

0赞 STerliakov 10/22/2023
重要提示:您看到的程序的真正标准。它不包括换行符和用户输入。它只包括程序输出的内容。如果您的提示总是以冒号结尾,并且冒号从未在其他地方使用过,则只需拆分号并打印与输入交错的行即可。
0赞 Ilai K 10/22/2023
@STerliakov是的,当它不起作用时,我想通了。该程序应该适用于我不知道输出的多个 EXE,因此不幸的是,拆分不起作用。
1赞 Ouroborus 10/22/2023
今天的游戏机比你想象的要复杂。例如,当您在控制台中看到您的输入时,这不是输出,它只是输入回显,只是为了方便用户而显示。同样,是新行的代码表示形式。(只有一个,因为这是应用程序输出的唯一一个。其他三个是回显输入的结果。若要以与用户相同的方式实际与控制台应用交互,需要一种方法来检索输出,而不仅仅是在完成后检索所有输出。\n
0赞 Ilai K 10/22/2023
@Ouroborus我也试图通过执行 process.stdout.read() 来做到这一点,但由于没有 eof char,它只会卡住
0赞 mklement0 10/23/2023
如果你在Windows上,不能修改你的可执行文件,我担心你不走运(在类Unix的环境中,你会尝试通过该实用程序运行)。此答案不提供解决方案,但讨论了根本问题。script

答: 暂无答案