3

私はacファイルをhtmlファイルに変換するacコンソールアプリを持っています.cファイルの場所はコマンドライン引数としてプログラムに渡されます.(アプリはWindowsプラットフォーム用です)

私がやりたいのは、ユーザーがファイルを選択し、ファイルの場所を処理のためにcアプリに渡すことができるようにするpython guiアプリを用意することです。

tkinter を使用して基本的な python gui を作成する方法は既に知っていますが、2 つのプログラムを統合する方法についての有用な情報を見つけたり見つけたりすることはできません。

pOpen() メソッドを使用して文字列を c アプリにパイプすることは可能でしょうか? (でもやり方が分からない…)

注:私はpythonが初めてなので、単なる説明ではなくコード例が役立つかもしれません(すべてのpythonライブラリなどに精通していないため)。

4

2 に答える 2

10

おそらくsubprocessモジュールが必要です。

最低限:

import subprocess
retcode = subprocess.call(["/path/to/myCprogram", "/path/to/file.c"])
if retcode == 0:
   print "success!"

これにより、引数を指定してプログラムが実行され、そのリターン コードが返されます。

subprocess.call はプログラムが完了するまでブロックされることに注意してください。そのため、すぐに実行されるプログラムでない場合、完了するまで Tkinter GUI 全体が再描画を停止します。

より高度な使用には、 を使用することをお勧めしますsubprocess.Popen。これには、コマンドが完了するまでポーリングする必要がありますが、ブロックを少なくして実行できます。

C プログラムが HTML を標準出力に出力する場合、次のように出力をパイプする必要があります。

proc = subprocess.Popen(["/path/to/myCprogram", "/path/to/file.c"], 
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err_output = proc.communicate()
# output will now contain the stdout of the program in a string
于 2010-01-17T18:13:08.767 に答える
2

これを達成する方法はいくつかありますが、あなたの場合、必要なのはモジュールPopenから使用することだけです。subprocess

 process = subprocess.Popen(['myutil', file_location]...)
 process.wait()

結果を呼び出し元に戻す必要がある場合は、stdout に PIPE を使用し、サブプロセスが終了したときにそこから結果データを読み取ります。

于 2010-01-17T18:14:41.103 に答える