如何退出然后自动重启代码
How to exit and then automatically restart code
我有一些 python 代码可以抓取网站并报告特定加密货币的实时价格。当我使用 while 循环继续打印实时价格时,即使网站上的实时价格发生变化,它也会一遍又一遍地打印相同的价格。我想也许我的代码正在抓取它并以太快的速度访问该网站,所以我使用时间模块添加了延迟,但即使在延迟 1 分钟后,它也不会显示正确的价格,而是一遍又一遍地打印相同的价格。手动结束并重新启动代码似乎可以让这个错误消失,但我希望这个程序 运行 24/7 并在价格达到某个点时给我发电子邮件。到目前为止,这是我的代码:(顺便说一句,我是初学者)
import requests
import bs4
import time
run = True
while run == True:
# time.sleep(60)
res = requests.get("https://coinmarketcap.com/currencies/gitcoin/")
soup_obj = bs4.BeautifulSoup(res.text, "lxml")
item = soup_obj.select(".priceValue___11gHJ")[0]
item = item.text
print(item)
exit()
这有一个循环,但我添加了一个 exit() 函数以使其结束,因此我可以手动重新启动它。我只需要一种方法让这段代码自动结束,然后反复重启。我也在使用 Pycharm 的社区版(最新版)。
您可以编写程序来调用子进程,而不是自己进行网络调用。该子进程可以通过 stdout 调用请求,return 任何你想要的并退出。有多种方法可以做到这一点。您可以编写单独的脚本或使用 multiprocess.Process
,但在本示例中,我编写了一个脚本,该脚本会调用自身并使用命令行参数来了解它扮演的角色。
import sys
if len(sys.argv) == 1:
# run poller as subprocess so it exits
import time
import subprocess as subp
while True:
result = subp.run([sys.executable, __file__, "called"], capture_output=True)
# assuming program returns ascii float in single line
item = result.stdout.decode("ascii").strip()
print(item)
time.sleep(60)
else:
import requests
import bs4
res = requests.get("https://coinmarketcap.com/currencies/gitcoin/")
soup_obj = bs4.BeautifulSoup(res.text, "lxml")
item = soup_obj.select(".priceValue___11gHJ")[0]
item = item.text
sys.stdout.write(item)
我有一些 python 代码可以抓取网站并报告特定加密货币的实时价格。当我使用 while 循环继续打印实时价格时,即使网站上的实时价格发生变化,它也会一遍又一遍地打印相同的价格。我想也许我的代码正在抓取它并以太快的速度访问该网站,所以我使用时间模块添加了延迟,但即使在延迟 1 分钟后,它也不会显示正确的价格,而是一遍又一遍地打印相同的价格。手动结束并重新启动代码似乎可以让这个错误消失,但我希望这个程序 运行 24/7 并在价格达到某个点时给我发电子邮件。到目前为止,这是我的代码:(顺便说一句,我是初学者)
import requests
import bs4
import time
run = True
while run == True:
# time.sleep(60)
res = requests.get("https://coinmarketcap.com/currencies/gitcoin/")
soup_obj = bs4.BeautifulSoup(res.text, "lxml")
item = soup_obj.select(".priceValue___11gHJ")[0]
item = item.text
print(item)
exit()
这有一个循环,但我添加了一个 exit() 函数以使其结束,因此我可以手动重新启动它。我只需要一种方法让这段代码自动结束,然后反复重启。我也在使用 Pycharm 的社区版(最新版)。
您可以编写程序来调用子进程,而不是自己进行网络调用。该子进程可以通过 stdout 调用请求,return 任何你想要的并退出。有多种方法可以做到这一点。您可以编写单独的脚本或使用 multiprocess.Process
,但在本示例中,我编写了一个脚本,该脚本会调用自身并使用命令行参数来了解它扮演的角色。
import sys
if len(sys.argv) == 1:
# run poller as subprocess so it exits
import time
import subprocess as subp
while True:
result = subp.run([sys.executable, __file__, "called"], capture_output=True)
# assuming program returns ascii float in single line
item = result.stdout.decode("ascii").strip()
print(item)
time.sleep(60)
else:
import requests
import bs4
res = requests.get("https://coinmarketcap.com/currencies/gitcoin/")
soup_obj = bs4.BeautifulSoup(res.text, "lxml")
item = soup_obj.select(".priceValue___11gHJ")[0]
item = item.text
sys.stdout.write(item)