我有一个 python 脚本(需要很多时间来完成执行),我需要多次运行不同的参数。它是在远程机器上执行的。例如和测试目的,采用以下脚本test.py
:
import time
print("\nStart time: {}".format(time.ctime()))
time.sleep(10)
print("End time: {}".format(time.ctime()))
为此,我通常使用nohup
. 使用以下命令执行一次就可以正常工作:
nohup test.py &
输出正确保存在nohup.out
文件中。为了按顺序运行,我做了一些研究,发现了 [this question][1],我想出了以下命令:
nohup $(python test.py; python test.py) &
哪个工作正常。我运行命令,快速注销并再次登录,看到htop
第一个执行正在运行,然后完成,然后第二个开始。但问题是输出没有保存到nohup.out
文件中。如果我在终端中等待两个执行完成,则会显示以下错误:
nohup:无法运行命令“开始”:没有这样的文件或目录
我在这里做错了什么?
PS.:我需要记录输出,因为我需要查看脚本的当前进度并知道如果它没有正确完成会发生哪个错误。因此,如果有一些其他命令可以使用,而不是nohup
可以记录 pythonprint
的,它也会受到欢迎。
您拥有的命令:
nohup $(python test.py; python test.py) &
将尝试执行脚本的输出。这可能不是你想要的。
您在这里想要的是让 nohup 启动一个命令,该命令将按顺序执行这两个命令。可以执行此操作的最直接的程序是使用运行子 shell:
nohup bash -c "python one.py; python two.py" &
至于更好的方法,您可能需要研究 tmux 或 screen。如果您在 tmux/screen 中启动命令,不仅可以将会话与当前正在运行的 shell 分离,还可以稍后重新连接到会话以恢复并与程序交互。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句