2012-05-13 10 views
1

基本的に私はそれのPythonプログラムと部品を作っていますが、C++実行可能ファイルを実行する必要がある、私はexeファイルを呼び出すいます:Pythonのsubprocess.call()を使ってC++プログラムに引数を渡す方法を教えてください。

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++プログラムにパイプするにはどのようなコードが必要ですか?

答えて

3

これらはパラメータとしてmain関数に渡されます。

main(int argc, char *argv[]) 

argcの長さはargvです。あなたはわずか数引数を渡したい場合は、別の回答で提案されているようにだから、

main(int argc, char *argv[]) 
{ 
cout<<argv[1]; 
return 0; 
} 
+0

[OK]を、私が試しましたこれは、exeのアドレスを教えてくれました。pythonコマンドから渡された "hi"はどうやってアクセスするのですか、別のpythonコマンドが必要ですか? ps。FILE * input = popen( "pythonw.exe "、" r ")あなたのコードを試してみる前に、私はそれを残しておくべきですか? ありがとう、 Jamie –

+0

私の間違いargv [0]はプログラム名、argv [1]は最初のパラメータです。あなたのプログラムが何を得るかはargvにあるので、FILE変数。 – janisz

+0

完璧!それに感謝します。 –

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") 

これは「HI」をC++プログラムでCINで読み取り可能な標準入力として改行に続くを渡し、処理を実行するためのpythonを伝えます。標準出力(C++でのcoutの結果)はstdoutリストに渡され、標準エラーがstderrに渡されます。

あなたはよりインタラクティブなコミュニケーションを必要とする場合、彼らはPythonでファイルハンドルであるかのように、あなたもproc.stdoutとproc.stdinにアクセスすることができます(例えばproc.stdin.write(「N \ HI」)

+0

だから、C++はPythonにメッセージを送り、次の引数を与えてからcin >> a;またはsimmilar? –

関連する問題