【发布时间】:2020-05-12 08:20:16
【问题描述】:
我正在尝试使用 crontab 每分钟运行一次 test.py,它调用(在其他一些函数之后)带有参数的 test2.py。 当我在终端中运行“python3 test.py”时,我在任务管理器中看到了 test2.py。当我使用 crontab 时,情况并非如此。正如我在终端中看到的输出一样,Test.py 确实运行了。所有文件都在 /root/ 中。
Crontab:
PATH=/root
* * * * * /usr/bin/flock -n /tmp/5.lockfile /usr/bin/python3 /root/test.py > /dev/pts/3
Test.py:
import subprocess
import os
import time
print(os.environ['PATH']) #Gives \root
#Three different methods, doesn't work:
subprocess.call("python3 /root/test2.py 1", shell=True)
subprocess.Popen("python3 test2.py 1", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
os.system("test2.py 1")
time.sleep(30)
【问题讨论】:
-
也许 python3 不在运行 crontab 的用户的路径中。无论如何,您可以考虑不使用 shell=True 和字符串命令行。使用
sys.executable查找当前解释器并进行参数list:subprocess.call([sys.executable,"/root/test2.py","1"]) -
在 Crontab 中运行时路径通常不同。因此,我会尝试 subprocess.Popen("python3 /root/test2.py 1") 以确保在定位 test2.py 时没有混淆。
-
@Jean-FrançoisFabre 谢谢,这行得通。请将其发布为答案!
标签: python python-3.x cron subprocess