3

这是一个使用tqdm进度条的简单脚本:

from tqdm import tqdm
from time import sleep

for i in tqdm(range(10000)):
  sleep(1)

有时我想让它在我的服务器上运行并退出。自然,在这些情况下,我对查看进度条并不感兴趣。我这样做:

$ python mytest.py &
$ disown
$ exit

但是一旦我退出,这个过程就会停止。为什么会发生,该怎么办?

4

1 回答 1

1

我想答案可能会在这里提到。

调用disown不会完全断开进程与终端的连接。由于sys.stdin,sys.stoutsys.stderr是从 shell 继承的,因此如果终端被破坏,脚本将在尝试打印到标准错误时立即失败,这会tqdm尝试执行。

我不知道您是否正在运行子shell,或者该exit命令是否会破坏终端。如果后者是真的,那可能解释了进程终止的原因。您也许可以尝试将所有终端输出重定向/dev/null到,看看是否有帮助?

于 2017-07-23T16:47:53.963 回答