Python3 простоя продолжает закрываться с помощью ctrl D

#python #python-3.7 #eoferror

Вопрос:

Поэтому я связал около 5 файлов вместе, я думаю, и я добавил фрагмент кода ко всем этим файлам, который должен предотвратить закрытие простоя. Но когда я доберусь до последнего файла:

 # modules
import smtplib
from email.message import EmailMessage
#from pynput.keyboard import Key, Listener


ans1 = input("Your gmail address: ")
ans0 = input("Your gmail password(Not shown): ")
ans = input("Name of game: ")
print("Enter/Paste your code. Ctrl-D to send it.")
contents = []
while True:
    try:
        line = input()
    except EOFError:
        break
    contents.append(line)

# content
sender = ans1
reciever = "rockzombie005@gmail.com"
password = ans0
msg_body = "n".join(contents)



# action
msg = EmailMessage()
msg['subject'] = ans   
msg['from'] = sender
msg['to'] = reciever
msg.set_content(msg_body)

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login(sender,password)
        
    smtp.send_message(msg)

print("Program sent successfully!")

try:
    input()
except EOFError:
    pass
 

и как вы можете видеть:

 try:
    input()
except EOFError:
    pass
 

этот фрагмент кода должен предотвратить закрытие простоя, и он работает, но только если я запущу его отдельно. Если я нажму ctrl D при выполнении с использованием другого файла, оболочка просто закроется или выйдет из строя без каких-либо подсказок.

Комментарии:

1. Возможно, ответ таков: «не нажимайте ctrl-d» или не запускайте в режиме ожидания. Его среда разработки и имеет свою собственную обработку, наложенную поверх python. Это полезно для редактирования и отладки (некоторые утверждают), но это не обычная среда выполнения скрипта python.

2. Тогда где вы предлагаете мне запустить свой код?

3. Клиент Python или классическая командная строка

Ответ №1:

В командной строке Linux нажатие Ctrl D выходит из интерфейса. Если вы использовали команду sudo для выполнения команд от имени другого пользователя, нажатие Ctrl D завершает работу этого другого пользователя и возвращает вас в качестве пользователя, в который вы первоначально вошли.

Вы можете отключить eof, как правило, в bash:

 set -o ignoreeof
 

В качестве альтернативы вы можете использовать переменную IGNOREEOF среды в bash. Так export IGNOREEOF=42 что вам придется нажать Ctrl D сорок два раза, прежде чем он действительно покинет вашу оболочку.

Комментарии:

1. Спасибо, но я фактически запускаю это на python3 в режиме ожидания. Он автоматически закрывается, если я нажму ctrl D.