![将输入从文件重定向到 Python 脚本失败,但可以使用管道](https://linux22.com/image/180057/%E5%B0%86%E8%BE%93%E5%85%A5%E4%BB%8E%E6%96%87%E4%BB%B6%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20Python%20%E8%84%9A%E6%9C%AC%E5%A4%B1%E8%B4%A5%EF%BC%8C%E4%BD%86%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%AE%A1%E9%81%93.png)
我有这个 python 脚本:postpycess.py
从网格文件中绘制数据airfoil.p3d
。该脚本旨在处理不使用参数的输入,因此我创建了一个输入文件commands.txt
并将其重定向到该脚本。
命令.txt:(请注意,第一个输入是机翼的名称,应提供无扩展名.p3d
)
airfoil
1
1
q
q
在 Windows 中我可以按如下方式运行:
python postpycess.py < commands.txt
但不幸的是,当我在 Ubuntu 20.04 上运行该命令时,脚本失败:
The current working dir: /tmp/allworks/python/mwe
This is Postpycess, the CFD postprocessor
Version: 1.1
.p3dr project name: Error: can't read the file airfoil
然而,以下工作只是文件:
printf 'airfoil\n1\n1\nq\nq\n' | python postpycess.py
我努力缩小 python 脚本中的原因范围,并创建一个可以重现相同问题但没有成功的最小示例。
您能解释一下为什么在 Linux 中重定向文件输入失败吗?
我感谢您的帮助。
答案1
您的行可能以(windows-style) 而不仅仅是(unix-style)commands.txt
结尾。\r\n
\n
只需将其转换为 unixsed -i 's/\r//' commands.txt
或将脚本运行为sed 's/\r//' commands.txt | python postpycess.py
.