我构建了一个包含 Python3
(python 3.5) 的 Linux docker 容器,并运行一个 python 应用程序(带有 Keras 的标准 docker,类似于 here )。
一切都很好。问题是当我尝试运行读取参数的应用程序时,它会将字符 *
视为多个参数!例如,当我执行 python3 myapp.py * -1
时,它会打印 len(sys.argv): 6
,但如果我执行 python3 myapp.py 1 -1
,它会打印正确的数字。
print("len(sys.argv): "+str(len(sys.argv)))
基本上,我想查找目录中的所有文件,这是奇怪的行为。现在我在代码中硬编码了 *
,它现在可以工作了。
有人经历过这种奇怪的行为吗?!这是为什么?
最佳答案
在实际调用的程序看到参数之前,Linux shell(与 Windows 不同)将通配符替换为空格分隔的文件和/或目录列表。您可以在 Linux shell 中尝试此操作,例如与
echo *
打印当前目录下的所有文件。
为了避免这种情况,星号必须用反斜杠转义。然后它将按原样交给程序(不带反斜杠)。例如
echo \*
演出
*
关于python - Docker 容器 Linux 在使用 * 读取 Python 参数时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965992/