Tim Golden wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">Dave
Angel wrote:
tarun wrote:
Hello All,
I've a batch file to be invoke using a python script. The batch
file has
pause, and the time, I need to send some command to the batch file
from my
scripts. I placed both, the batch file (test.bat) and the python script
(test.py) in the same folder. And executed 'test.py'
(Please find the source files and error below).
*I get the following error:*
Traceback (most recent call last):
File "<string>", line 74, in run_nodebug
File "D:\test.py", line 4, in <module>
proc = subprocess.Popen(my_bat,stdin=subprocess.PIPE)
File "C:\Python25\lib\subprocess.py", line 588, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "C:\Python25\lib\subprocess.py", line 717, in _get_handles
c2pwrite = self._make_inheritable(c2pwrite)
File "C:\Python25\lib\subprocess.py", line 746, in _make_inheritable
DUPLICATE_SAME_ACCESS)
WindowsError: [Error 6] The handle is invalid
*Python Script:*
*test.py*
import subprocess,os
my_bat = os.getcwd()+'\\test.bat'
proc = subprocess.Popen(my_bat,stdin=subprocess.PIPE)
input = '\n'
proc.communicate(input)
*Batch File*
*test.bat*
echo "START'
pause
echo 'END'
Please help me with this issue.
Thanks In Advance,
Tarun
subprocess.Popen() is expecting the name of a program, which should
normally have an extension of .exe You're handing it a .bat file,
which is not executable. It only executes in the context of a
command interpreter (shell), such as cmd.exe
You can probably do what you want by running "cmd.exe" and passing it
"test.bat" as a parameter
Sounds reasonable, but isn't actually true. This works fine:
<code>
import subprocess
open ("t.bat", "w").write ("echo hello")
subprocess.Popen ("t.bat")
</code>
TJG
</div>
The docs of Popen() state that it uses CreateProcess() on Windows, so I
didn't even try it. Thanks for informing me it works. I see now the
COMSPEC manipulation in _execute_child(), but I'm still puzzled. When I
step through, it skips that part because we didn't specify shell= as an
argument. It still had not put the cmd.exe /c into the args variable
when it called CreateProcess(). So is the Python CreateProcess more
than a thin wrapper around Windows version?
Another bug in this program is that it does not include quotes around
the program name. If the current directory has a space in it, and an
appropriately named executable happens to be in the parent directory of
the one with the space, it'll get run instead of the batch. For
example, if the current directory is c:\source code\test and
there's a file in the route called c:\source.exe then it'll get run.
But what about the OP problem? I now see it runs okay for me, both
stand-alone and inside Komodo. But he's getting an exception inside
make_inheritable(), which is apparently being passed an invalid handle.
Runs OK for me, in Python 2.6 running under XP, SP3. 2.6.1
(r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)]
--
http://mail.python.org/mailman/listinfo/python-list