Using subprocess wait() and poll()

前端 未结 2 1111
终归单人心
终归单人心 2021-02-01 17:37

I am trying to write a small app that uses the subprocess module.

My program calls an external Bash command that takes some time to process. During this ti

2条回答
  •  粉色の甜心
    2021-02-01 18:21

    Both wait() (with timeout specified) and poll() return None if the process has not yet finished, and something different if the process has finished (I think an integer, the exit code, hopefully 0).

    Edit:

    wait() and poll() have different behaviors:

    • wait (without the timeout argument) will block and wait for the process to complete.
    • wait with the timeout argument will wait timeout seconds for the process to complete. If it doesn't complete, it will throw the TimeoutExpired exception. If you catch the exception, you're then welcome to go on, or to wait again.
    • poll always returns immediately. It effectively does a wait with a timeout of 0, catches any exception, and returns None if the process hasn't completed.
    • With either wait or poll, if the process has completed, the popen object's returncode will be set (otherwise it's None - you can check for that as easily as calling wait or poll), and the return value from the function will also be the process's return code.

    So I think you should do something like:

    while myprocess.poll() is None:
        print("Still working...")
        # sleep a while
    

    Be aware that if the bash script creates a lot of output you must use communicate() or something similar to prevent stdout or stderr to become stuffed.

提交回复
热议问题