我正在尝试将 Python 脚本集成到 bash 脚本中。但是,当我使用该input()
功能时,我得到一个EOFError
. 我该如何解决这个问题?
#!/bin/bash
python3 <<END
print(input(">>> "))
END
您不能通过程序的标准输入同时获取脚本和用户输入。(这实际上就是您要执行的操作。<<
重定向标准输入。)
理想情况下,您可以将脚本作为命令行参数提供,而不是使用以下标准-c SCRIPT
输入<<EOF heredoc EOF
:
#!/bin/bash
python3 -c 'print(input(">>> "))'
请注意,您可能需要注意引用和转义,以防您有更复杂的带有嵌套引号的 Python 脚本。
如果需要,您仍然可以让脚本运行多行:
#!/bin/bash
python3 -c '
import os.path
path_name = input("enter a path name >>> ")
file_exists = os.path.exists(path_name)
print("file " + path_name + " " +
("exists" if file_exists else "does not exist"))
'
请注意,当您想在 Python 脚本中使用单引号时会遇到麻烦,就像您想打印doesn't
而不是does not
.
您可以使用多种方法解决此问题。我认为最灵活的一个(除了让你陷入引用地狱之外)是用双引号包围 Python 脚本,并正确转义所有内部双引号和 shell 解释的其他字符:
#!/bin/bash
python3 -c "
print(\"It doesn't slice your bread.\")
print('But it can', 'unsliced'[2:7], 'your strings.')
print(\"It's only about \$0. Neat, right?\")
"
请注意,我也 escaped $
,否则 shell 会在周围的双引号内解释它,结果可能不是你想要的。