如何使Crontab运行Python脚本打开终端并执行操作?

时间:2019-02-21 11:26:45

标签: python

我希望Crontab在特定时间运行Python脚本。该Python脚本使用"subprocess"库打开终端,并使用“ Pyautogui”库编写内容。怎么做?

我研究了Crontab并使其与我的Bash脚本一起工作,该脚本可以执行其他操作。我了解到Crontab具有某些限制。我使用DBUS_SESSION_BUS_ADDRESS启用gsettings,但是现在,这是关于打开终端并编写内容的。

Crontab条目:00 15 * * * python3 /home/Admin/Desktop/shutdown_script.py

该怎么做?

目标:我的目标是在我离开计算机的同时在特定时间同时关闭我的计算机和其他19台计算机。我使用CSSH连接到其他计算机。我的脚本会执行此操作,并同时写入密码和sudo shutdown now以将其全部关闭。

编辑:Python脚本

#!/usr/bin/python3

import pyautogui, time

pyautogui.hotkey("ctrlleft", "altleft", "t")
time.sleep(1)
pyautogui.write("Hello World!", interval=0.05)

在终端中手动运行=可以; 尝试使用Crontab =无效

爆炸:如果不可能或没人知道,该怎么做或有任何想法,那么我会寻找另一种方式,也许在Python中安排一些Python库或.. idk ..找到一些东西(想法),可能可以完成此操作:D

4 个答案:

答案 0 :(得分:2)

使用Xorg,您需要具备以下两项才能进入正在运行的窗口会话并开始运行应用程序:

  1. 显示配置
  2. XAUTH

显示位很简单:

export DISPLAY=:0

该环境变量的格式实际上是hostname:displaynum.screennum,缩写为您看到的内容。

Xauth是在X会话中传递机密的一种方法,以便服务器知道此窗口属于该用户。肮脏的方式:

export XAUTHORITY=/home/$your_username/.Xauthority

更清洁,更强大的方法:

xauth add $(xauth list $DISPLAY)

它将xauth list的输出作为参数传递给xauth add

然后从命令行运行终端。

答案 1 :(得分:0)

知道了。

04 11 * * * export DISPLAY=:0 && /usr/bin/python3 /home/Admin/Desktop/shutdown_script.py

export DISPLAY=:0放入Crontab即可。

我找到的地方及其帮助:Click me

它每天在11:04 AM运行此脚本。

答案 2 :(得分:0)

如果您使用的是Mac,则可以将AppleScripts与cron结合使用,以模拟打开终端并在终端中运行脚本。

0 15 * * * osascript -e 'tell app "Terminal" to do script "python3 /home/Admin/Desktop/shutdown_script.py" activate'

答案 3 :(得分:0)

我发现这无法打开终端显示,只能在后台运行python脚本(仅在系统进程中可见)。

也许是因为我在Linux Lubuntu 17.10上,但是我发现其他人也遇到了同样的问题,所以我想在这里分享对我有用的解决方案。

下面是我在crontab中添加的代码,以使其在终端窗口中工作(在我的情况下为lxterminal),如果需要在Python脚本终止后保持终端窗口打开,也可以在$ .py之后放置$ SHELL。

export DISPLAY=:0 && lxterminal -e bash -c '/fullpath/mypythonscript.py'