python - 如何使用 crontab 调度带有参数的 python 脚本?
问题描述
我有一个 python 脚本,运行时需要 2 个参数, [url] & [keyword] 。文件完成后,它会输出一个 .csv 文件,其中包含 [position] 、 [url]、 [keyword] 、 [date] 。
我正在尝试使用 crontab 安排此脚本每天运行一次。
所以,换句话说,我试图安排以下每天运行:
python3 script.py [url] [keyword]
我在我的 crontab 中添加了以下内容(我试图通过每分钟运行一次来查看它是否有效)
* * * * * * /usr/bin/python3 /path-to-my-script/rank.py
但没有任何反应,我在 /path-to-my-script/ 文件夹中看不到预期的 .csv 文件,当我检查邮件时,我收到以下错误:
/bin/sh: file-name.csv: command not found
我的 python 脚本如下所示:
import sys
import re
import random
from robobrowser import RoboBrowser
import datetime
import csv
sitename = sys.argv[1]
keyword = "+".join(sys.argv[2:])
print("site: %s keyword: %s" % (sitename, keyword))
agent = ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0']
parser = 'html.parser'
browser = RoboBrowser(history=False,
user_agent=random.choice(agent),
parser=parser)
browser.open('https://www.google.com/search?num=100&q=' + keyword)
links = browser.find_all("div", {"class": "g"})
counter = 0
d=[]
for i in links:
counter = counter + 1
if sitename in str(i):
url = i.find_all('a', href=True)
position = "%d" % (counter)
rank = "%s" % (url[0]['href'])
now = datetime.date.today().strftime("%d-%m-%Y")
keyword = keyword
d.append(keyword)
d.append(position)
d.append(rank)
d.append(now)
print(keyword, position, rank, now)
file =datetime.date.today().strftime("%d-%m-%Y")+'-' +keyword + '.csv'
with open(file, 'w') as f:
writer = csv.writer(f)
writer.writerow(['Keyword' , 'Rank', 'URL' , 'Date'])
writer.writerows(zip( d[0::4], d[1::4] , d[2::4], d[3::4]))
我希望每天运行以下命令并将我的 .csv 文件存储在特定文件夹中
python3 script.py [url] [keyword]
解决方案
这是一个简单的示例来演示如何使用 shell 脚本和 cronjob 来安排带有 args 的 python 脚本。
hello_world.py
import sys
def main():
print(sys.argv[1])
print(sys.argv[2])
if __name__ == '__main__':
main()
hello_world_scheduler.sh - 使用这样的 shell 脚本有很多额外的优势,将来可能会派上用场。
#! /bin/bash
cd /path_to_my_script
/usr/bin/python3 hello_world.py hello world! > execution_logger.log
跑
chmod +x hello_world_scheduler.sh ## to make the script executable
./hello_world_scheduler ## to run the shell script
cat execution_logger.log
输出应该是
hello
world!
只需将调度程序添加到 cronjob -
* * * * * /path_to_script/hello_world_scheduler.sh
这应该工作
推荐阅读
- python - 如何在tkinter windows python中显示从excel文件中提取的matplotlib图形
- typescript - 部署到Gcloud的App编译TS时不能写JS文件?
- android - Android:react-naive-maps 仅详细显示绝对的一个块区域
- javascript - 如何使用 react next 来自定义内部服务器错误?(500内部服务器错误)
- python - (已解决)为什么我收到错误 mysql.connector.errors.ProgrammingError: 1064 (42000)?我正在使用蟒蛇
- reactjs - Reactjs - 使用反应路由器更改 url 但组件没有改变
- javascript - 在新标签中打开谷歌地图街景显示错误的地方
- python - 我想限制用户在“类型”字段中添加重复值
- node.js - 如何将云功能部署到 .firebaserc 中的不同项目?
- actions-on-google - 退出时不调用actions_intent_CANCEL