看起来你有点困惑sys.argv
。它是您在启动程序时为其提供的参数列表。所以如果你执行python program.py f
这将是["program.py", "f"]
。如果你执行它作为python program.py f w i
这将是["program.py", "f", "w", "i"]
。所以你展示的代码:
i = sys.argv[1]
f = sys.argv[2]
w = sys.argv[3]
如果调用少于 3 个参数的程序,将会抛出异常。
有一些库可以帮助您解析参数,例如argparse https://docs.python.org/3/library/argparse.html or click http://click.pocoo.org/5/。但对于简单的情况,仅使用 sys.argv 可能更容易。
看起来您希望程序以三种模式运行:i、f 和 w。
if len(sys.argv) > 2:
print("Please only call me with one parameter")
sys.exit()
if sys.argv[1] == "f":
#do some stuff
elif sys.argv[1] == "i":
#do some other stuff
elif sys.argv[1] == "w":
#do some more other stuff
else:
print("Only accepted arguments are f, i and w")
sys.exit()
您可以通过写入标准输出print
or sys.stdout.write()
其中第一个将为您输入的每个字符串添加换行符。
如果您希望用户交互式输入某些内容,您应该使用input()
(raw_input()
在Python2中。那里input()
将语句评估为你几乎总是不想要的Python代码)。
如果你想用大量数据做某事,最好将路径传递给程序,然后读入文件。你还可以通过以下方式使用 stdinsys.stdin.read()
但你想通过管道传递一些东西some-other-program | python program.py f
或读取文件python program.py f < file.txt
。 (理论上,您也可以使用 stdin 来读取交互式数据,但不要这样做,而是使用输入。)