我有一个在 WSL 终端(Ubuntu 18.04)中运行的基本脚本,它从用户那里获取 2 个输入来创建电子邮件,本质上它获取消息,然后获取要使用的服务器。
它首先提示输入消息并允许用户输入输入,这很好用。之后,它会在消息中对服务器名进行正则表达式搜索,如果没有找到它会提示它,但是每次它都会出现 EOFError 并且我找不到原因。
ServerTraceback (most recent call last):
File "/home/dev/bin/script", line 155, in <module>
create_report()
File "/home/dev/bin/script", line 98, in create_report
servername=get_servername()
File "/home/dev/bin/script", line 10, in get_servername
servername = raw_input("Server")
EOFError
奇怪的是,如果我使用 python2 -i /home/dev/bin/script 运行相同的脚本,它可以工作,但是从 WSL 终端它会出现 EOFError。
任何帮助将不胜感激,我对此很陌生,对发生的事情有点迷茫。
这是第二个输入,即产生 EOFError 的输入
def get_servername():
servername = raw_input("Server")
return servername
从 strace 我也看到了这一点;
26004 read(3, "log_info(\"Parsing report for IPs"..., 512) = 512
26004 read(3, " break\nif not servername:\n lo"..., 512) = 512
26004 write(2, " ", 4) = 4
26004 write(2, "servername = raw_input(\"Server N"..., 40) = 40
26004 close(3) = 0
26004 write(2, "EOFError", 8) = 8
26004 write(2, "\n", 1) = 1
26004 rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc31ec3ef20}, {sa_handler=0x7fc31f76c130, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc31ec3ef20}, 8) = 0
26004 exit_group(1) = ?
26004 +++ exited with 1 +++
该脚本在交互模式下运行良好,直接在 Linux 机器上运行时也能正常运行。
我不确定,但我认为 stdin 中的某些内容设置不正确或类似?
非常感谢任何帮助。