2017-04-19 1023 views
-1

我已經檢查了很多帖子和子過程文檔,但沒有提供解決我的問題的方法。至少,我找不到一個。如何使用整數輸入參數從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。

+2

你的程序不讀書'stdin'(參見對於C'cin' ++)它正在讀取命令行參數。你沒有提供命令行參數,所以沒有元素'argv [1]',所以它崩潰 - 儘管確切的行爲是未定義的。你的C++程序不寫入'stdout'(參見'cout'),它返回一個數字。你似乎混淆了命令行參數,返回語句和標準流 - 它們沒有關係。 – cdarke

+0

[在Python中調用外部命令]可能的重複(http://stackoverflow.com/questions/89228/calling-an-external-command-in-python) –

+0

順便說一下,'p.stdout.read'只是返回一個方法對象,你可能的意思是'p.stdout.read()'(但這不起作用,因爲你的程序沒有寫入'stdout')。 – cdarke

回答

3

你必須使用cout輸出:

#include <iostream> 
using namespace std; 
#include <stdlib.h> 
#include <string> 

int main(int argc, char* argv[]) 
{ 
    int x = atoi(argv[1]); 
    cout << x; 
} 

和命令行參數輸入:

from subprocess import check_output 

path = 'Path to my MyExe.exe' 

def callmyexe(value): 
    return int(check_output([path, str(value)])) 

a = callmyexe(5) 
b = a + 1 
print(b) 
+0

謝謝你的回答!這非常有用! – stevula

+0

是否可以使用字典與輸入和輸出完成相同的任務? main()的類型是什麼? ?INT? – stevula

+0

您需要用Python對字典進行編碼並使用C++對其進行解碼。有關更多數據,請使用stdin進行傳輸 – Daniel

相關問題