Python Docker容器Linux在读取带有*

Python Docker容器Linux在读取带有*,python,python-3.x,linux,docker,Python,Python 3.x,Linux,Docker,我构建了一个linux docker容器,其中包含Python3 python 3.5,并使用Keras运行python应用程序标准docker,类似于 一切都很好。问题是,当我试图运行读取参数的应用程序时,它会将字符*视为多个参数!例如,当我执行python3 myapp.py*-1时,它会打印lensys.argv:6,但如果执行python3 myapp.py 1-1,它会打印正确的数字 print("len(sys.argv): "+str(len(sys.argv))) 基本上,我想

我构建了一个linux docker容器,其中包含Python3 python 3.5,并使用Keras运行python应用程序标准docker,类似于

一切都很好。问题是,当我试图运行读取参数的应用程序时,它会将字符*视为多个参数!例如,当我执行python3 myapp.py*-1时,它会打印lensys.argv:6,但如果执行python3 myapp.py 1-1,它会打印正确的数字

print("len(sys.argv): "+str(len(sys.argv)))
基本上,我想查找目录中的所有文件,这是一种奇怪的行为。现在我在代码中硬编码了,它现在可以工作了


以前有人经历过这种奇怪的行为吗?!这是为什么?

与Windows不同的是,Linux shell在实际调用的程序看到参数之前,将通配符替换为以空格分隔的文件和/或目录列表。您可以在Linux shell中尝试此操作,例如使用

echo *
打印当前目录的所有文件

为了避免这种情况,星号必须用反斜杠转义。然后,它将按原样传递给程序,而不带反斜杠。例如

echo \*
显示


这是Linux shell的自动通配符扩展。用\*替换*应该行得通。你认为这和Docker有什么关系?在普通的shell中,它不是做同样的事情吗?这就是像cat*.txt和rm*jpg这样的命令的工作方式。shell用所有匹配的文件名替换通配符。为什么python会有所不同?因为在Windows上它工作得非常完美……因此我感到惊讶。@MichaelButscher谢谢。请随意添加,作为一个答案,给你的信用!
*