我已經檢查了很多帖子和子過程文檔,但沒有提供解決我的問題的方法。至少,我找不到一個。如何使用整數輸入參數從python調用exe文件並將.exe輸出返回給python?
無論如何,這裏是我的問題描述: 我想從一個.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'),它返回一個數字。你似乎混淆了命令行參數,返回語句和標準流 - 它們沒有關係。 – cdarke
[在Python中調用外部命令]可能的重複(http://stackoverflow.com/questions/89228/calling-an-external-command-in-python) –
順便說一下,'p.stdout.read'只是返回一個方法對象,你可能的意思是'p.stdout.read()'(但這不起作用,因爲你的程序沒有寫入'stdout')。 – cdarke