1

基本上我正在制作一个 Python 程序,其中一部分需要运行 C++ 可执行文件,我正在调用 exe:

subprocess.call(["C:\\Users\\User\\Documents\\Programming\\Python\\Utilities\\XMLremapper\\TranslatorSource\\FileFixer.exe", "hi"])

但是如何让 C++ 程序读取输入呢?我试过了:

FILE * input = popen("pythonw.exe", "r");
cout<< input.getline() << endl << endl;

但这只是输出0x22ff1c,绝对不是“嗨”。需要什么代码将输入通过管道传输到 C++ 程序中?

4

2 回答 2

3

它们作为参数传递给main函数。

main(int argc, char *argv[])

argc是 的长度argv。所以它会是

main(int argc, char *argv[])
{
 cout<<argv[1];
 return 0;
}
于 2012-05-13T16:30:33.377 回答
0

如果您只想传入一些参数,一个简单的选择是在命令行上读取参数,如另一个答案中所建议的那样。

对于更大量的输入/输出,您自然希望使用 cout 或 cin,更好的选择是使用 subprocess.Popen。然后,您可以像在 python 中的文件句柄一样写入和读取其他进程。例如:

proc = subprocess.Popen(["FileFixer.exe"], 
            stdin=subprocess.PIPE, 
            stdout=subprocess.PIPE, 
            stderr=subprocess.PIPE)
stdout, stderr = proc.communicate("hi\n") 

这告诉 python 运行该进程,传入 'hi' 后跟回车作为标准输入,然后可以由 C++ 程序中的 cin 读取。然后将标准输出(C++ 中 cout 的结果)传递到 stdout 列表,并将标准错误传递到 stderr。

如果您需要更多的交互式通信,您还可以访问 proc.stdout 和 proc.stdin,就好像它们是 python 中的文件句柄一样(例如 proc.stdin.write("hi\n")

于 2012-05-14T00:11:54.553 回答