[英]Endless problems with a very simple python subprocess.Popen task
我希望python將大約50萬個整數(范圍在0-255之間)發送給用C ++編寫的可執行文件。 然后,該可執行文件將以幾千個整數響應。 每一行。 看起來子過程應該很簡單,但是我遇到了無數麻煩。 現在用代碼進行即時測試:
// main()
u32 num;
std::cin >> num;
u8* data = new u8[num];
for (u32 i = 0; i < num; ++i)
std::cin >> data[i];
// test output / spit it back out
for (u32 i = 0; i < num; ++i)
std::cout << data[i] << std::endl;
return 0;
在python中構建一個字符串數組(“數據”),每個字符串都類似於“ 255 \\ n”,然后使用:
output = proc.communicate("".join(data))[0]
...不起作用(例如stdin已關閉,一次可能太多)。 使用proc.stdin和proc.stdout都不起作用。 這應該非常簡單,但是我不斷遇到異常,並且/或者沒有輸出數據返回給我。 我的Popen當前是:
proc = Popen('aux/test_cpp_program', stdin=PIPE, stdout=PIPE, bufsize=1)
在我拔頭發之前先給我建議。 ;)
這對我來說非常合適:
#include <iostream>
int main()
{
int num;
std::cin >> num;
char* data = new char[num];
for (int i = 0; i < num; ++i)
std::cin >> data[i];
// test output / spit it back out
for (int i = 0; i < num; ++i)
std::cout << data[i] << std::endl;
return 0;
}
蟒蛇:
In [9]: from subprocess import Popen, PIPE
In [10]: a = Popen('./a.out', stdin=PIPE, stdout=PIPE)
In [11]: a.stdin.write("2\nab")
In [12]: a.stdout.read()
Out[12]: 'a\nb\n'
請注意,我在要寫入的字節數之間添加了一個定界符(\\ n),這是最安全的,如果您不希望c ++ cin在發送諸如3、1、2、3之類的東西時會失敗,它們會連接到3123,期望這么多爭論。
在C ++中,當您從cin
讀取char
或unsigned char
時,它將從stdin
讀取單個字節。 但是,您希望它讀取從0到255的數字的十進制表示形式。如果您讀取一個int
則它應該正確讀取它:
unsigned int n;
std::cin >> n;
data[i] = static_cast<u8>(n);
或者,您可以使用chr
函數讓Python代碼將值以字節而不是數字的順序寫入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.