登录时在终端中运行python脚本

登录时在终端中运行python脚本,python,python-3.x,cron,ubuntu-16.04,Python,Python 3.x,Cron,Ubuntu 16.04,我编写了一个python脚本,其中包含无限循环中的菜单。我的目标是在用户登录时在终端中启动脚本并开始与之交互。我创建了一个launcher.sh文件,它将在启动时执行,并在crontab中注册。但是,当系统重新启动时,会出现以下错误: 1: START 2: POWEROFF Please make a choice: Traceback (most recent call last): File "menu.py", line 27, in <module> main(

我编写了一个python脚本,其中包含无限循环中的菜单。我的目标是在用户登录时在终端中启动脚本并开始与之交互。我创建了一个launcher.sh文件,它将在启动时执行,并在crontab中注册。但是,当系统重新启动时,会出现以下错误:

1: START
2: POWEROFF
Please make a choice: Traceback (most recent call last):
  File "menu.py", line 27, in <module>
    main()
  File "menu.py", line 16, in main
    choice = input ("Please make a choice: ")
EOFError: EOF when reading a line
这是我的launcher.sh文件:

#!/bin/sh
# launcher.sh
cd /home/rao/Desktop/project
sudo python3 menu.py
cd /
和crontab行:

@reboot sh /home/rao/Desktop/project/launcher.sh >> /home/rao/Desktop/project/logs/status.log 2>&1

哪里出错了?

Cron作业是以非交互方式执行的,这就是它无法读取用户输入的原因。它们绝对不是与用户交互的地方

由于脚本的目的是与用户交互,因此在没有用户的情况下,无需在系统启动时运行脚本。我想,您希望在用户登录时运行它

您可以将脚本放入用户的
~/.profile
中,或者如果您使用的是bash,则将其放入
~/.bash\u profile
~/.bashrc

~/.profile
~/.bash\u profile
的情况下,它将在用户每次登录时执行(仅当用户正在使用bash时才执行后一个)

.bashrc
的情况下,每次用户打开交互式终端时都会执行该命令

查看示例以了解详细信息:

~/.profile
是放置适用于整个会话的内容的地方,例如登录时要启动的程序(但不是图形程序,它们进入不同的文件)和环境变量定义


当我将以下命令放入启动应用程序时,它起作用了

x-terminal-emulator -e "python3 /path-to-script/menu.py"

看起来要尝试使消息更复杂,如
choice=input(“1:START\n2:POWEROFF\n请选择:”)
“启动”和“登录”是两个独立的事件,不能保证特定用户在启动后登录。没有登录,就没有会话。没有会话,就没有终端。@tripleee抱歉,我没有澄清,它的登录但是
cron
不是,并且不能轻松连接到登录会话,它无论如何都会运行;在任何用户都没有时间登录之前,
@reboot
作业肯定会运行。我希望终端自动启动并在其中编写脚本。是的,我希望在用户登录inOK时执行此脚本,然后改用
.bash\u profile
。当用户登录时,您在
.bash\u profile
中输入的任何内容都将被执行,您甚至可以从那里启动终端(使用脚本)。我尝试将命令输入.bash\u profile,但没有成功。我看到了您的答案。您不认为X终端模拟器是一个X(即图形)应用程序吗?我在回答中明确指出,
.bash\u profile
不是图形程序的合适位置。但是你从来没有提到你需要它,所以我想你不需要。你应该提到这样一个重要的事实,而且当你知道这一点并且在我的回答中读到这不是一个适合这样做的解决方案时。我们会节省我们两个的时间。
x-terminal-emulator -e "python3 /path-to-script/menu.py"