【问题标题】:How to restart a python script using another?如何使用另一个重新启动 python 脚本?
【发布时间】:2020-12-04 19:26:18
【问题描述】:

(“第一个脚本”从用户那里获取输入,“第二个脚本”通知任务。)

我一直在尝试使用另一个脚本重新启动 python 脚本,但在尝试了一些方法后我无法成功。我开发了一个提醒,当用户之前设置的时间到达时通知用户,应用程序在 Linux 上运行,它有 2 个 python 脚本。第一个是接受用户提供的输入来安排任务。例如,“下午 12:30 打电话给老板”。然后 Linux 将在下午 12:30 通知它。另一个是检查输入并在时间到来时通知他们。

在第一个脚本中,我试图在用户给出新任务时重新启动另一个脚本,因为脚本需要读取新任务来通知它。我还想在运行第二个脚本时终止第一个脚本。但是第二个脚本必须仍然有效。在第一个脚本中,我尝试了以下命令:

os.system(f"pkill -f {path2}")
os.system(f"python {path2}")

这些都行不通。

我还想在我的操作系统启动时运行第二个脚本。

总结:

1- 我想用另一个python脚本重新启动一个python脚本,当第二个运行时第一个应该被终止。

2- 我想在我的操作系统启动时运行第二个脚本。

关于我的提醒应用程序的存储库是here

【问题讨论】:

  • 你的答案可以在这个stackoverflow.com/questions/3054740/…中找到
  • 要在启动时开始,您可以在cron 中使用@reboot。但所有这些看起来都类似于名为daemonservice 的程序,它具有命令startstoprestart,并且它们会在重新启动后自动启动。也许您应该搜索此类程序的信息。
  • 我尝试使用 cron 但它给了我这个“python3: 无法打开文件 'reminder2.py': [Errno 2] 没有这样的文件或目录” os 启动时。
  • 我在crontab中添加的命令是“@reboot sh /home/hrx/launcher_for_reminder.sh > /home/hrx/logsforreminder/cronlog 2>&1”

标签: python cron scheduled-tasks startup


【解决方案1】:

大约 1 个:

假设另一个脚本的名称是 2.py(可使用下面的代码更改),这对我来说非常有效:

1.py:

import subprocess
import os
import time

OTHER_SCRIPT_NAME = "2.py"

process_outputs = subprocess.getoutput("ps aux | grep " + OTHER_SCRIPT_NAME) # Searching for the process running 2.py
wanted_process_info = process_outputs.split("\n")[0] # Getting the first line only
splitted_process_info = wanted_process_info.split(" ") # Splitting the string
splitted_process_info = [x for x in splitted_process_info if x != ''] # Removing empty items
pid = splitted_process_info[1] # PID is the secend item in the ps output
os.system("kill -9 " + str (pid)) # Killing the other process
exit()

time.sleep(1000) # Will not be called because exit() was called before

2.py:

import time

time.sleep(100)

大约 2 个:

在 linux 中,您可以通过将脚本写入/etc/rc.local 文件来在启动时执行脚本

只需从 rc.local 文件运行您的脚本,您就可以开始了:

/etc/rc.local:

python '/path/to/your/scripts'

【讨论】:

  • 为什么要在 2.py 中添加“time.sleep(100)”,应该放在哪里?还有一个,如果time.sleep(1000)不会被调用,为什么还要加上呢?
  • etc中没有任何名为rc.local的文件
  • 我刚刚在 etc 下创建了 rc.local 文件,使其可执行,在 exit 0 行上方添加带有我的应用程序路径的命令并重新启动操作系统,但它不起作用。我确定。 @Dharman
  • All the time.sleeps 是为了表明这种方法有效。关于 /etc/rc.local - 您尝试运行的命令是什么?我建议您只使用 'mkdir /home/[your_username]/tmp1' 来测试脚本是否真的运行(重置后您的用户主目录下应该有 tmp1 目录)。应该管用。另外 - 您正在使用哪个 Linux 发行版?
  • /etc 下没有 rc.local 文件,我创建了它并在其中添加了以下命令:(然后我使其可执行)` #!/bin/sh -e # # rc.local local # # 此脚本在每个多用户运行级别结束时执行。 # 确保脚本将在成功时“退出 0”或任何其他 # 错误时的值。 # # 为了启用或禁用此脚本,只需更改执行 # 位。 # # 默认情况下,这个脚本什么都不做。退出 0 python '/home/hrx/Desktop/reminder/reminder.py' `它的 Linux Mint 20
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多