I’m developing a plugin and I want to call an external program that takes as input a string and outputs a string. Under Mac and Linux I successfully used subprocess.Popen() but under Windows it doesn’t work. For instance, from a Python console inside QGIS under Mac/Linux:
import subprocess p = subprocess.Popen(['ls', '-al'], stdout=subprocess.PIPE) print p.stdout.read() total 17101 drwxr-xr-x 35 root wheel 1258 Mar 13 09:11 . drwxr-xr-x 35 root wheel 1258 Mar 13 09:11 .. -rw-rw-r--@ 1 root admin 6148 Dec 6 12:13 .DS_Store d--x--x--x 8 root wheel 272 Nov 5 10:02 .DocumentRevisions-V100 … But under Windows if I try to catch the output (which is a requirement for me) : import subprocess p = subprocess.Popen(['dir'], shell=True, stdout=subprocess.PIPE) Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\PROGRA~1\QGISVA~1\apps\Python27\lib\subprocess.py", line 703, in __init__ errread, errwrite) = self._get_handles(stdin, stdout, stderr) File "C:\PROGRA~1\QGISVA~1\apps\Python27\lib\subprocess.py", line 839, in _get_handles p2cread = self._make_inheritable(p2cread) File "C:\PROGRA~1\QGISVA~1\apps\Python27\lib\subprocess.py", line 878, in _make_inheritable _subprocess.DUPLICATE_SAME_ACCESS) WindowsError: [Error 6] The handle is invalid What’s the best way to call a program and catching the output (a string) under Windows? Many thanks, Hugo _______________________________________________ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer