in packages/jsii-pacmak/lib/targets/python.ts [1877:1928]
public emitBinScripts(code: CodeMaker): string[] {
const scripts = new Array<string>();
if (this.loadAssembly) {
if (this.assembly.bin != null) {
for (const name of Object.keys(this.assembly.bin)) {
const script_file = path.join(
'src',
pythonModuleNameToFilename(this.pythonName),
'bin',
name,
);
code.openFile(script_file);
code.line('#!/usr/bin/env python');
code.line();
code.line('import jsii');
code.line('import sys');
code.line('import os');
code.line();
code.openBlock('if "JSII_RUNTIME_PACKAGE_CACHE" not in os.environ');
code.line('os.environ["JSII_RUNTIME_PACKAGE_CACHE"] = "disabled"');
code.closeBlock();
code.line();
emitList(
code,
'__jsii_assembly__ = jsii.JSIIAssembly.load(',
[
JSON.stringify(this.assembly.name),
JSON.stringify(this.assembly.version),
JSON.stringify(this.pythonName.replace('._jsii', '')),
`${JSON.stringify(this.assemblyFilename)}`,
],
')',
);
code.line();
emitList(
code,
'exit_code = __jsii_assembly__.invokeBinScript(',
[
JSON.stringify(this.assembly.name),
JSON.stringify(name),
'sys.argv[1:]',
],
')',
);
code.line('exit(exit_code)');
code.closeFile(script_file);
scripts.push(script_file.replace(/\\/g, '/'));
}
}
}
return scripts;
}