File: _debugger_case_subprocess_and_fork.py

package info (click to toggle)
pydevd 2.9.5%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 10,880 kB
  • sloc: python: 75,138; cpp: 1,851; sh: 310; makefile: 40; ansic: 4
file content (47 lines) | stat: -rw-r--r-- 1,591 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import os
import sys
import subprocess


def breaknow():
    print('break here')


if '--fork-in-subprocess' in sys.argv:
    popen = None
    if sys.platform == 'win32':
        popen = subprocess.Popen([sys.executable, __file__, '--forked'])
        pid = popen.pid
    else:
        pid = os.fork()
    try:
        ppid = os.getppid()
    except:
        ppid = '<unknown>'
    print('currently in pid: %s, ppid: %s' % (os.getpid(), ppid))
    print('os.fork returned', pid)
    breaknow()
    # i.e.: wait so that we check for the retcode so that we don't get a traceback such as the one
    # below (as that code in __del__ will only be called if returncode is None).
    # Traceback (most recent call last):
    # File "C:\hostedtoolcache\windows\Python\3.9.13\x64\lib\subprocess.py", line 1055, in __del__
    # self._internal_poll(_deadstate=_maxsize)
    # File "C:\hostedtoolcache\windows\Python\3.9.13\x64\lib\subprocess.py", line 1457, in _internal_poll
    # if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
    # OSError: [WinError 6] The handle is invalid
    if popen is not None:
        popen.wait(20)

elif '--forked' in sys.argv:
    try:
        ppid = os.getppid()
    except:
        ppid = '<unknown>'
    print('currently in pid: %s, ppid: %s' % (os.getpid(), ppid))
    breaknow()

elif '--fork-in-subprocess' not in sys.argv:
    out = subprocess.check_output([sys.executable, __file__, '--fork-in-subprocess'])
    breaknow()
    print('\n\nin pid %s, output from subprocess.run:\n%s' % (os.getpid(), out.decode('utf-8')))
    print('TEST SUCEEDED!')