我正在尝试编写代码,以便使用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="")