Ce n'est pas la première fois que j'ai ce problème, et ça me dérange vraiment. Chaque fois que je ouvre un tuyau à l'aide du module Python subprocess
, je ne peux communicate
avec elle une fois, que la documentation précise: Read data from stdout and stderr, until end-of-file is reached
Communiquer plusieurs fois avec un processus sans casser le tuyau?
proc = sub.Popen("psql -h darwin -d main_db".split(),stdin=sub.PIPE,stdout=sub.PIPE)
print proc.communicate("select a,b,result from experiment_1412;\n")[0]
print proc.communicate("select theta,zeta,result from experiment_2099\n")[0]
Le problème ici est que la deuxième fois, Python est pas heureux. En effet, il a décidé de fermer le fichier après la première communication:
Traceback (most recent call last):
File "a.py", line 30, in <module>
print proc.communicate("select theta,zeta,result from experiment_2099\n")[0]
File "/usr/lib64/python2.5/subprocess.py", line 667, in communicate
return self._communicate(input)
File "/usr/lib64/python2.5/subprocess.py", line 1124, in _communicate
self.stdin.flush()
ValueError: I/O operation on closed file
Les communications multiples sont-elles autorisées?
pour psql, il existe de nombreux wrappers Python existants: http://wiki.python.org/moin/PostgreSQL –