0

我正在尝试将 Python 脚本集成到 bash 脚本中。但是,当我使用该input()功能时,我得到一个EOFError. 我该如何解决这个问题?

#!/bin/bash
python3 <<END
print(input(">>> "))
END
4

1 回答 1

1

您不能通过程序的标准输入同时获取脚本和用户输入。(这实际上就是您要执行的操作。<<重定向标准输入。)

理想情况下,您可以将脚本作为命令行参数提供,而不是使用以下标准-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 会在周围的双引号内解释它,结果可能不是你想要的。

于 2019-08-19T14:01:25.110 回答