【发布时间】:2017-04-19 18:06:10
【问题描述】:
我已经检查了很多帖子和子流程文档,但没有一个可以解决我的问题。至少,我找不到一个。
无论如何,这是我的问题描述: 我想从 .py 文件中调用 .exe 。 .exe 需要一个整数输入参数并返回一个整数值,我想用它在 python 中进行进一步计算。
为了简单起见,我想使用我的“问题”代码的最小工作示例(见下文)。如果我运行此代码,则 .exe 崩溃,我不知道为什么。也许我只是错过了一些东西,但我不知道是什么!?所以这就是我所做的:
我用来生成的c++代码:MyExe.exe
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string>
int main(int argc, char* argv[])
{
int x = atoi(argv[1]);
return x;
}
我的python代码:
from subprocess import Popen, PIPE
path = 'Path to my MyExe.exe'
def callmyexe(value):
p = Popen([path], stdout=PIPE, stdin=PIPE)
p.stdin.write(bytes(value))
return p.stdout.read
a = callmyexe(5)
b = a + 1
print(b)
我使用 MSVC 2015 和 Python 3.6。
【问题讨论】:
-
您的程序没有读取
stdin(C++ 见cin),它正在读取命令行参数。你没有提供命令行参数,所以没有元素argv[1],所以它崩溃了——尽管确切的行为是未定义的。您的 C++ 程序没有写入stdout(请参阅cout),它正在返回一个数字。您似乎混淆了命令行参数、返回语句和标准流 - 它们不相关。 -
顺便说一句,
p.stdout.read只是返回一个方法对象,您可能是指p.stdout.read()(但这不起作用,因为您的程序没有写入stdout)。
标签: python input integer subprocess exe