How to spawn a new independent process in Python

前端 未结 2 1626
猫巷女王i
猫巷女王i 2020-12-15 04:10

I have a some Python code that occasionally needs to span a new process to run a shell script in a \"fire and forget\" manner, i.e. without blocking. The shell script will n

相关标签:
2条回答
  • 2020-12-15 04:48

    Try prepending "nohup" to script.sh. You'll probably need to decide what to do with stdout and stderr; I just drop it in the example.

    import os
    from subprocess import Popen
    
    devnull = open(os.devnull, 'wb') # Use this in Python < 3.3
    # Python >= 3.3 has subprocess.DEVNULL
    Popen(['nohup', 'script.sh'], stdout=devnull, stderr=devnull)
    
    0 讨论(0)
  • 2020-12-15 05:04

    Just use subprocess.Popen. The following works OK for me on Windows XP / Windows 7 and Python 2.5.4, 2.6.6, and 2.7.4. And after being converted with py2exe - not tried 3.3 - it comes from the need to delete expired test software on the clients machine.

    import os
    import subprocess
    import sys
    from tempfile import gettempdir
    
    def ExitAndDestroy(ProgPath):
        """ Exit and destroy """
        absp = os.path.abspath(ProgPath)
        fn = os.path.join(gettempdir(), 'SelfDestruct.bat')
        script_lines = [
            '@rem Self Destruct Script',
            '@echo ERROR - Attempting to run expired test only software',
            '@pause',
            '@del /F /Q %s' % (absp),
            '@echo Deleted Offending File!',
            '@del /F /Q %s\n' % (fn),
            #'@exit\n',
            ]
        bf = open(fn, 'wt')
        bf.write('\n'.join(script_lines))
        bf.flush()
        bf.close()
        p = subprocess.Popen([fn], shell=False)
        sys.exit(-1)
    
    if __name__ == "__main__":
       ExitAndDestroy(sys.argv[0])
    
    0 讨论(0)
提交回复
热议问题