""" =============================================================== (TBD: on PCs, could just reuse thread scheme used for Android) PROVISIONAL CHOICE: all PCs use the thread scheme coded for Android. This works, has no noticeable performance negative, and avoids the extra code of a third launching scheme. Run any Python script in a subprocess.Popen() child process, with arguments passed in, and output (including prints) redirected to a file. End of process can be detected by reading EOF on the process's output pipe in a consumer thread, whose output queue is polled by a timer loop in the GUI. See Mergeall's GUI launcher. Mergeall's scripts can be run directly by subprocess.Popen on Android and will continue in the background (and they are, in the original tkinter GUI), but using a thread or service sidesteps the child-process killing potential in Android 12+. Neither thread, service, nor process is paused when the user leaves the app for another. This is wrapper is an alternative to coding+importing main() functions for all scripts' __main__ logic, and changing all print()s to use a custom object. This is also less brittle than the thread wrapper: while it too resets global system items for script duration, these resets affect only the spawned process, not the main app/GUI. =============================================================== """ # TBD import subprocess def run_script_process_wrapper( mainfilepath, # path to the script file to run in thread (rel|abs) argslist, # command-line arguments list for the script stdouterr, # where to route stdout+stderr: a file name, not object onexit, # signal script/process exit to app/GUI process stdin=None, # a string to use to thread's stdin, '\n' for multiline trace=False): # if True, display state there """ """ # copy/paste/mod service version pass if __name__ == '__main__': # run the script's code in this process run_script_process_wrapper()