Python:如何确保程序只从sys.stdin获取文件数据?

Python:如何确保程序只从sys.stdin获取文件数据?,python,shell,unix,io,stdin,Python,Shell,Unix,Io,Stdin,我想使用名为simdata.txt的文件中的数据来运行我用Python编写的模拟。我想确保当用户从命令行执行我的程序时,数据只通过sys.stdin流传送 也就是说,我希望我的程序运行如下: python3 simulation.py < simdata.txt 如何确保用户始终以第一种方式而不是第二种方式执行程序?我通常使用以下方法执行此规则: if len(sys.argv) > 2: print("This is not how you use the pr

我想使用名为
simdata.txt
的文件中的数据来运行我用Python编写的模拟。我想确保当用户从命令行执行我的程序时,数据只通过
sys.stdin
流传送

也就是说,我希望我的程序运行如下:

python3 simulation.py < simdata.txt
如何确保用户始终以第一种方式而不是第二种方式执行程序?我通常使用以下方法执行此规则:

if len(sys.argv) > 2:
    print("This is not how you use the program. Example of use:")
    print("python3 simulation.py < simdata.txt")
    exit(1)
如果len(sys.argv)>2:
打印(“这不是您使用程序的方式。使用示例:”)
打印(“python3 simulation.py
但这似乎有问题,因为我可能想向程序中添加额外的标志,以改变模拟的行为。也就是说,也许我想这样做:

python3 simulation.py < simdata.txt --plot_data
python3 simulation.py

有没有更好的方法确保simdata.txt只通过stdin输入,而不影响我添加额外程序标志的能力?

使用argparse模块是更好的答案。这样,我就不必对输入有如此严格的要求。

使用argparse模块是更好的答案。这样我就不必对输入有如此严格的要求。

您可以使用argparse模块解析其他参数,然后检查是否也提供了文件名(如未命名的参数),您可以使用argparse模块解析其他参数,然后检查是否也提供了文件名(如未命名的参数),
python3 simulation.py < simdata.txt --plot_data