Python子进程.run C程序不工作



我正在尝试编写代码,以便使用Python运行C可执行文件。

只需调用./myprogram就可以在终端中运行C程序,它会提示一个选择菜单,如下所示:

1. Login
2. Register

现在,使用Python和子流程,我编写了以下代码:

import subprocess
subprocess.run(["./myprogram"])

Python程序运行,但它什么也不显示(也没有错误!(。你知道为什么会这样吗?

当我尝试时:

import subprocess
subprocess.run(["ls"])

显示该特定目录中的所有文件。所以我认为这是对的。

您必须打开这样的子流程:

import subprocess
cmd = subprocess.Popen(['./myprogram'], stdin=subprocess.PIPE)

这意味着cmd将有一个可以写入的.stdin;默认情况下,print将输出发送到Python脚本的stdout,该脚本与子进程的stdin没有连接。这样做:

cmd.stdin.write('1n')  # tell myprogram to select 1

然后很可能你应该:

cmd.stdin.flush()  # don't let your input stay in in-memory-buffers

cmd.stdin.close()  # if you're done with writing to the subprocess.

PS如果您的Python脚本是*nix系统上的一个长时间运行的进程,并且您注意到您的子进程已经结束,但仍然显示为Z(僵尸(进程,请检查该答案。

也许会刷新stdout?

print("", flush=True,end="")

最新更新