【问题标题】:Dump both stdin and stdout of external program转储外部程序的标准输入和标准输出
【发布时间】:2012-12-31 17:34:29
【问题描述】:

我正在尝试通过 python 运行 exe 并将 用户输入 和输出转储到日志文件。

exe源文件:

//test.c
#include<stdio.h>
void main()
{
    int a=0;
    printf("Enter no:\n");
    scanf("%d",&a);
    printf("You entered %d",a);
}

编译完上述文件后,我尝试通过python运行test.exe

#Dumpinputoutput.py
file="log.txt"
fo=open(file, "w")
subprocess.call(["test.exe"],stdout=fo,stderr=fo)
fo.close()

在执行脚本时,

log.txt 是:

Enter no:

You entered 54

代替

Enter no:
54
You entered 54

我希望用户的输入也包含在日志文件中,可以吗?
我也尝试了 subprocess.peopen,但得到了相同的结果。

【问题讨论】:

  • script 正是这样做的,但在 Windows 上不可用(可能通过cygwin 除外)并且不是 Python。
  • @PhilFrost:我安装了 cygwin,它没有脚本命令,我尝试通过 setup.exe -q -P script 安装该命令..但它仍然显示找不到命令..? ?

标签: python cmd stdout stdin


【解决方案1】:

问题是您在日志文件中寻找的回显“54”是 cmd.exe 的函数,而不是您正在运行的 exe(请参阅 cmd.exe 上的 /Q 开关)。

您需要一种在控制应用程序时模拟 cmd.exe 的方法。查看此答案以获取有关 WExpect 的信息:There is WExpect for Python.

该软件包将让您模拟一个终端,该终端应允许您捕获与 exe 的所有交互。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2013-09-18
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多