2016-12-24 75 views
-1

我已經使用下面的代碼將輸入傳遞給讀取輸入並打印它的cpp程序。如何通過python發送輸入到C++

from subprocess import Popen, PIPE 

p = Popen(['a.exe'], shell=True, stdout=PIPE, stdin=PIPE) 
for ii in range(10): 
    value = str(ii) + '\n' 
    value = bytes(value, 'UTF-8') # Needed in Python 3. 
    p.stdin.write(value) 
    #p.stdin.flush() 
    result = p.stdout.readline().strip() 
    print(result) 

繼被蟒蛇

b'' 
b'' 
b'' 
b'' 
b'' 
b'' 
b'' 
b'' 
b'' 
b'' 

編輯的輸出: 以下是CPP文件

#include<iostream> 
using namespace std; 

int main() 
{ 
    int a[10]; 
    for(int i=0;i<10;i++) 
    { 
     cin>>a[i]; 
     cout<<a[i]; 
     std::cout.flush(); 
    } 
    return 0; 
} 
+2

什麼是你的問題? –

+0

a.exe是什麼?也許它返回空字符串。 – furas

+0

輸出不正確。 – Sniper

回答

2

我試圖在Linux代碼的代碼,我有兩個問題

  • 在Python我不得不用全路徑a.exe在CPP運行

  • 我不得不添加<< '\n',因爲它發出的文本,而不\np.stdout.readline()等待\n

沒有見到完整路徑許多b''(和在第一線消息"... not found"

沒有<< '\n'腳本凍結,因爲readline()正在等待\n


編輯:我忘了:我不得不添加p.stdin.flush()


編輯:爲@Sugar建議的評論 - 使用std::endl代替"\n"

+2

。 –

+1

@ Jean-FrançoisFabre嘗試用'p.stdin.flush()' – furas

+0

很好的工作。我曾嘗試過,但在C++端沒有換行符。之後,我嘗試了換行符,但沒有標準輸入法刷新:)你不應該刷新stdin,這是真的,但在我們的例子中'stdin'是python輸出文件。 –