简体   繁体   English

为什么我的 python 脚本在 temal 和 cron 之间的工作方式不同?

[英]Why does my python script work differently between the teminal and cron?

I am trying to diagnose some shenanigans, where my python code (Lightning.py) executes in a terminal window with "sudo ./Lightning.py" but not withing my cron job.我正在尝试诊断一些恶作剧,其中我的 python 代码 (Lightning.py) 在终端窗口中使用“sudo ./Lightning.py”执行,但不使用我的 cron 作业。

I am rather new to linux and would welcome any assistance!我对 linux 比较陌生,欢迎任何帮助!

Here is the code for Lightning.py这是 Lightning.py 的代码

#!/usr/bin/env python3

import wget
import os
from shutil import copyfile

if os.path.exists("prepy.txt"):
  os.remove("prepy.txt")
print('Beginning file download from Saratoga Weather with wget module')

url = 'http://saratoga-weather.org/USA-blitzortung/placefile.txt'
wget.download(url, '/home/user/Desktop/prepy.txt')

old_lightnings = ['0,1,2,', '0,1,3,','0,1,4,','0,1,5,','0,1,6,','0,1,7,','0,1,8,','0,1,9,']

with open('prepy.txt') as oldfile, open('lightning.txt', 'w') as newfile:
    for line in oldfile:
        if not any(old_lightning in line for old_lightning in old_lightnings):
            newfile.write(line)
copyfile('/home/user/Desktop/lightning.txt', '/home/user/Music/lightning.txt')
print('\nLightning.py has been run')

And here is the associated cron job.这是相关的 cron 作业。 It was set at every minute so I could test it.它每分钟设置一次,所以我可以测试它。

* * * * * /usr/bin/python /home/user/Desktop/Lightning.py

I am currently testing this in Ubuntu 18.04.3.我目前正在 Ubuntu 18.04.3 中对此进行测试。

The only thing that does happen is that whenever the cron runs, it creates a file "prepy(1).txt", but doesn't sort through and delete lines and save it as the correct output.唯一会发生的事情是,每当 cron 运行时,它都会创建一个文件“prepy(1).txt”,但不会对行进行排序和删除并将其保存为正确的输出。

As an added bonus, here is a sample of the downloaded file from the script:作为额外的奖励,这里是从脚本下载的文件示例:

;Bliztortung USA Placefile for GRLevel3
; Placefile by Ken True, saratoga-weather.org
; Updated: Sun, 24 Nov 2019 08:15:01 PST
RefreshSeconds: 300
IconFile: 1,30,30,15,15,http://saratoga-weather.org/USA-blitzortung/lightningicons.png
Icon: 29.860824,-76.139117,0,1,9,Blitzortung @ 06:15:53 PST
Icon: 35.379265,-71.096417,0,1,9,Blitzortung @ 06:16:09 PST
Icon: 31.609272,-73.765092,0,1,9,Blitzortung @ 06:16:13 PST
Icon: 31.885003,-73.709302,0,1,9,Blitzortung @ 06:16:13 PST
Icon: 35.459427,-70.928328,0,1,9,Blitzortung @ 06:17:28 PST
Icon: 35.552307,-71.060657,0,1,9,Blitzortung @ 06:17:28 PST
Icon: 31.669056,-73.737014,0,1,9,Blitzortung @ 06:19:35 PST
Icon: 31.669056,-73.737014,0,1,9,Blitzortung @ 06:19:35 PST
Icon: 30.22179,-75.510468,0,1,9,Blitzortung @ 06:19:45 PST
Icon: 29.831653,-76.047618,0,1,9,Blitzortung @ 06:20:38 PST
Icon: 29.812147,-76.042173,0,1,9,Blitzortung @ 06:20:38 PST
Icon: 30.149676,-75.405737,0,1,9,Blitzortung @ 06:21:29 PST
Icon: 31.799604,-73.352328,0,1,9,Blitzortung @ 06:23:57 PST
Icon: 31.831979,-73.345653,0,1,9,Blitzortung @ 06:23:57 PST
Icon: 38.715605,-67.371949,0,1,9,Blitzortung @ 06:26:28 PST
Icon: 38.671515,-67.335955,0,1,9,Blitzortung @ 06:26:28 PST
Icon: 30.147951,-75.345644,0,1,9,Blitzortung @ 06:26:51 PST
Icon: 31.878007,-73.527605,0,1,9,Blitzortung @ 06:26:58 PST
Icon: 31.848858,-73.334373,0,1,9,Blitzortung @ 06:26:59 PST
Icon: 29.562893,-76.483871,0,1,9,Blitzortung @ 06:27:24 PST
Icon: 29.640704,-76.541928,0,1,9,Blitzortung @ 06:27:24 PST
Icon: 34.266843,-71.379808,0,1,9,Blitzortung @ 06:27:44 PST
Icon: 29.810437,-75.893204,0,1,9,Blitzortung @ 06:28:00 PST
Icon: 29.878976,-75.931348,0,1,9,Blitzortung @ 06:28:00 PST
Icon: 29.903286,-75.94225,0,1,9,Blitzortung @ 06:28:00 PST
Icon: 18.400364,-105.684513,0,1,9,Blitzortung @ 06:28:11 PST
Icon: 38.524655,-67.036093,0,1,9,Blitzortung @ 06:28:52 PST
Icon: 29.469489,-76.511855,0,1,9,Blitzortung @ 06:29:14 PST
Icon: 29.661606,-76.533699,0,1,9,Blitzortung @ 06:29:14 PST
Icon: 29.661606,-76.533699,0,1,9,Blitzortung @ 06:29:14 PST

Additional Info:附加信息:

Here is a simplified version of the .py file这是 .py 文件的简化版本

#!/usr/bin/env python3

import wget
import os
from shutil import copyfile

if os.path.exists("prepy.txt"):
  os.remove("prepy.txt")

url = 'sample_url/file.txt'
wget.download(url, 'path1/prepy.txt')

bad_strings = ['str1', 'str2', 'str3']

with open('prepy.txt') as oldfile, open('postpy.txt', 'w') as newfile:
    for line in oldfile:
        if not any(bad_string in line for bad_string in bad_strings):
            newfile.write(line)
copyfile('/path1/postpy.txt', '/path2/postpy.txt')

The cron job was made by typing in cron 作业是通过输入完成的

sudo crontab -e

and adding the above cron job at the end of the file and saving cron.并在文件末尾添加上述cron作业并保存cron。 This was also done with regular permissions, where rather than typing "sudo" in front of "crontab -e" the following was entered这也是使用常规权限完成的,而不是在“crontab -e”前面输入“sudo”,而是输入以下内容

crontab -e

This should mean that sudo isn't used to run the file.应该意味着 sudo 不用于运行文件。

I think the working directory is not /home/user/Desktop/ when the code runs in cron.当代码在 cron 中运行时,我认为工作目录不是 /home/user/Desktop/ 。 Add a line at the beginning of the code: os.chdir("/home/user/Desktop/")在代码开头添加一行: os.chdir("/home/user/Desktop/")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么 Python 脚本可以从 CLI 运行,但从 cron 作业调用时却不能运行? - Why does a Python script work from the CLI, but not when called from a cron job? 为什么Windows 10 Task Scheduler执行我的Python脚本时会产生不同的运行 - Why does my Python script run differently when executed by Windows 10 Task Scheduler Tmux,cron 不适用于我在谷歌云上的 python 脚本 - Tmux, cron doesn't work with my python script on google clouds 计划的 cron Python 脚本日志记录的工作方式与手动运行时不同 - Scheduled cron Python script logging working differently than it does when run manually 为什么我的Python代码在Jupyter Notebook中工作,而不是作为脚本? - Why does my Python code work in Jupyter Notebook but not as a script? 为什么这个 python 脚本可以在我的本地机器上运行,而不能在 Heroku 上运行? - Why does this python script work on my local machine but not on Heroku? 为什么这个python脚本不起作用? - why does this python script not work? 为什么python脚本在Spyder vs cmd提示符下的工作方式不同 - Why does python script works differently in Spyder vs cmd prompt 为什么在 Python 中调用函数和编写语句的工作方式不同? - Why does calling a function and writing statements explicitly work differently in Python? 为什么这个argparse代码在Python 2和3之间表现不同? - Why does this argparse code behave differently between Python 2 and 3?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM