Issue with subprocess Module

Tim Golden mail at timgolden.me.uk
Tue Apr 7 08:21:43 EDT 2009


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



More information about the Python-list mailing list