the windows equivalent of fork()?

Bjorn Pettersen bpetterson at uswest.net
Sat Mar 18 20:05:25 EST 2000


The constants are in the os module, so os.P_WAIT instead of just plain
P_WAIT should solve your error.

-- bjorn

DataJockey wrote:

> I am looking for a way to use the following functionallity in windows.
> #test.py
> import os
>
> def spawn(prog, *args):
>     pipe1 = os.pipe()
>     pipe2 = os.pipe()
>     pid = os.fork()
>     if pid:
>         os.close(pipe1[1])
>         os.close(pipe2[0])
>         os.dup2(pipe1[0], 0)
>         os.dup2(pipe2[1], 1)
>
>     else:
>         os.close(pipe1[0])
>         os.close(pipe2[1])
>         os.dup2(pipe2[0], 0)
>         os.dup2(pipe1[1], 1)
>         args = (prog,) + args
>         os.execv(prog, args)
>
> spawn('C:\WINDOWS\Cdplayer.exe')
>
> if is run this i get an 'AttributeError: fork'  that i understand,
> fork() is a unix specific call.  however i do not know how to achieve
> the same functionallity with windows.
>
> i reference http://www.python.org/doc/current/lib/os-process.html and i
> see
>
> spawnv (mode, path, args)
> with constants for mode:
>     P_WAIT
>     P_NOWAIT
>     P_NOWAITO
>     P_OVERLAY
>     P_DETACH
> however if i try this
>         os.spawnv(P_WAIT, 'C:\WINDOWS\Cdplayer.exe')
>     the result is a NameError: P_WAIT
>         os.spawnv('P_WAIT', 'C:\WINDOWS\Cdplayer.exe')
>     the result is TypeError: 3-sequence, 2-sequence
>             i do not know what this means, sorry
>
> system (command)
>         if i try os.system('os.execl("C:\WINDOWS\Cdplayer.exe")')
>     a shell spawns and then exits, i get a result of 0 in the
> interpretor
>
> in my books i have found that there is a command os.popen() should
> automatically do the same as the above code spawn() from test.py.  i can
> not find popen()'s defenition in the modules.  there is a popen2.py, but
> the code in this file uses fork(), so i am assuming that the fork() call
> is causing the following errors.
>
> if i do os.popen('') to spawn a shell, the result
>     OSError: (0, 'Error')
> if i do os.popen('os.execl("C:\WINDOWS\Cdplayer.exe")')
>     OSError: (0, 'Error')
>
> and finally if i just do os.execl("C:\WINDOWS\Cdplayer.exe")
> python will preform an illegal op and exit, but it will open the cd
> player.
>
> i hope someone can help :)
> i am new to python and i love it.
> i have learned a lot by playing with python, and i can usually figure
> out my problems. but this one i can not, please help.
>
> if you read this far, you rock!
>
> thanks in advance
> jens page




More information about the Python-list mailing list