python - Docker 容器 Linux 在使用 * 读取 Python 参数时的奇怪行为

标签 python python-3.x linux docker

我构建了一个包含 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/

相关文章:

python - 有没有办法避免这种内存错误?

algorithm - python : List all possible paths in graph represented by dictionary

python - 如何在y轴上显示频率值?

html - 使用 grequests 从异步请求中提取文本

linux - 如何将第三列打印到最后一列?

python - 从 UTC+2 日期时间对象获取 UTC 小时

Python 3.7 Scapy 安装失败

python - 带有衰减的 Numpy 均匀分布

java - 谁在 ubuntu 服务器上神秘地向我的进程发送了 SIGKILL

java - 从 Java 程序运行 grep