err_code = posix_spawn(&pid, path->narrow,
if(use_posixspawnp){
file_actionsp, attrp, argvlist, envlist);
err_code = posix_spawn(&pid, path->narrow,
file_actionsp, attrp, argvlist, envlist);
}
else {
err_code = posix_spawnp(&pid, path->narrow,
file_actionsp, attrp, argvlist, envlist);
}
@support.skip_unless_symlink
def test_posix_spawnp(self):
# Use a symlink to create a program in its own temporary directory
temp_dir = tempfile.mkdtemp()
self.addCleanup(support.rmtree, temp_dir)
program = 'posix_spawnp_test_program.exe'
program_fullpath = os.path.join(temp_dir, program)
os.symlink(sys.executable, program_fullpath)
path = os.environ.get('PATH', '')
path = os.pathsep.join((temp_dir, path))
env = dict(os.environ, PATH=path)
spawn_args = (program, '-I', '-S', '-c', 'pass')
code = textwrap.dedent("""
import os
args = %a
env = %a
pid = os.posix_spawnp(args[0], args, env)
pid2, status = os.waitpid(pid, 0)
if pid2 != pid:
raise Exception(f"pid {pid2} != {pid}")
if status != 0:
raise Exception(f"status = {status}")
""" % (spawn_args, env))
# Use a subprocess to test os.posix_spawnp() with a modified PATH
# environment variable: posix_spawnp() uses the current environment
# to locate the program, not its environment argument.
args = ('-c', code)
assert_python_ok(*args, PATH=path)