import os
fd = os.popen("pkzip.exe -@ junk.zip", 'wb')
fd.write("file1.txt\n")
fd.write("file2.txt\n")
fd.write("file3.txt\n")
fd.write("\x1a") # Should Not Be Necessary But Is
fd.close()
There is a bug, either in the VAC++ compiler or OS/2 itself, where
the simple closure of the write-side of a pipe -to- a process does
not send an EOF to that process. I find I must explicitly write a
control-Z (EOF) before closing the pipe. This is not a problem when
using popen() in read mode.
One other slight difference with my popen() is that I return None
from the close(), instead of the Unix convention of the return code
of the spawned program. I could find no easy way to do this under
OS/2.
extproc C:\Python\Python.exe -x
import os
print "Hello from Python"
The '-x' option tells Python to skip the first line of the file
while processing the rest as normal Python source.
The existing chdir function didn't change the current drive under OS/2. Since the current working directory really consists of the current drive and the drive's current working directory, chdir should really change the drive as well (especially since there is no chdrive function).
time.sleep() was using select() instead of DosSleep(), the native OS/2 sleep function that was written into the code for it. The select() method didn't work quite right, so DosSleep() is now being used.
The python lock acquire() method blocks if the same thread attempts to acquire the lock a second time, and the release() method can release a lock that was acquired by another thread.
The OS/2 implementation was based on OS/2 mutex semaphores, which are owned by a particular thread & process. As such, an attempt to re-acquire a lock from the owning thread always immediately succeeded and an attempt to release the lock from a non-owning thread always failed.
Because of this, the standard Queue module didn't work under OS/2 - Queue uses locks as event semaphores which are triggered to notify another thread of an event.
Locks under OS/2 were reimplemented using event semaphores and critical sections, and now they appear to function identically to the *NIX version.
After implementing this fix, Fnorb's threaded model began to work under OS/2.