我编写了一个 bash 文件,其中包含屏幕命令。然后使用 subprocess 从 python 脚本调用该 bash 文件。一切工作都很好。但是,在脚本(成功)运行并保持打开状态后,屏幕会话不会关闭。这是不受欢迎的行为。
以下是 bash 文件的示例:
#!/bin/bash
VIRTUAL_ENV_DISABLE_PROMPT=true
source generic_path/bin/activate
cd generic_directory
screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R\n"
我怀疑我必须更改屏幕命令中的某些内容,对吗?您能否建议我必须更改什么,以便屏幕会话在脚本运行后自动关闭。
答案1
当你执行类似的事情时
screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R\n"
您将字符序列发送到终端(在先前创建的屏幕中)Rscript script_1.R\n
。这样 shell 将执行该命令,然后等待下一个命令。
当命令成功完成时,您需要执行类似Rscript script_1.R && exit
要求 shell 退出的操作(请适应您的 shell 语法)。
screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R && exit\n"
无论如何,没有必要创建一个窗口然后“远程控制”它。您只需要求 screen 为您执行命令即可。
screen -dm Rscript script_1.R
最后但并非最不重要的一点是,使用屏幕来放置在后台剧本是我听过的最奇怪的想法之一。请使用cron
orat
或&
代替(根据您的需要)。
如果“Rscript”不仅仅是一个随机示例,请阅读从命令行运行 R 脚本。
R CMD BATCH script_1.R &
答案2
如果你想“安排”一个脚本,我认为“Crontab”可能是一个很好的解决方案。另一个解决方案是在后台模式下运行脚本(使用 &)。
答案3
太棒了,我一直在寻找一种真正保持会话开放的方法,这就是逆问题。
要创建会话、启动命令并在运行命令后关闭会话,我只需使用:
screen -dmS session_name "command"