Pythonの拡張ができないならプロセス通信してしまえ
Pythonの拡張ができなくてSQLTOOLをx64実行することができないのを解決する案が思いついた。
Cで作ったプログラムをサブプロセスとしてIOをPIPEでPythonから操作してしまえば似たようなことができるではないか。
Cのテストプログラム(inout.c)
#includeint main() { char str[80]; while(gets(str) != NULL) { puts(str); } return 0; }
pythonのテストプログラム(test.py)
import subprocess as s p = s.Popen('inout.exe',stdin=s.PIPE,stdout=s.PIPE) line = raw_input() while line != '': p.stdin.write(line) print p.stdout.read() line = raw_input() p.stdin.close()
・・・失敗した。
print p.stdout.read()
のところで停止する。
どうやらstdinをclose()するまではstdoutを読めないらしい。
pythonのテストプログラム2(test2.py)
仕方が無いので新しい方法を考えた。
Cのstdoutをfileにredirectしてinした後に読めばOKか?
import subprocess as s f = open('iotemp','w') rf = open('iotemp') p = s.Popen('inout.exe',stdin=s.PIPE,stdout=f) line = raw_input() while line != '': p.stdin.write(line) print rf.readlines() line = raw_input() p.stdin.close() rf.close() f.close()
・・・失敗した。
うまく読み込めない。
inout.exeをcatに変えたらうまくいくのに。
inout.exeは何か悪いことでもしているのか?