我是编程新手。我为此查看了教程,但我只是变得更加困惑。但我想要做的是使用stdin和stdout接收数据,通过参数传递并打印出输出结果。
基本上,在命令行中,用户将输入和参数。
参数是:
i = sys.argv [1]
f = sys.argv [2]
w = sys.argv [3]
然后使用if / else程序将根据上面选择的参数执行一些东西。
即:在命令行中,用户将输入脚本名称f
(对于sys.argv[2:2]
)
$ test.py f
if sys.argv == i:
#execute some stuff
elif sys.argv == f:
#execute some stuff
else:
sys.argv == w
#execute some stuff
使用stdin / stdout如何创建此开关,程序根据选择的argv
执行一段代码?任何输入将不胜感激。
答案 0 :(得分:7)
看起来你对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或click等参数。但是对于简单的情况,只使用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
或sys.stdout.write()
写入stdout,其中第一个将为您输入的每个字符串添加换行符。
如果您希望用户以交互方式输入内容,您应该在python2中使用input()
(raw_input()
。input()
将语句评估为您几乎总是不想要的python代码)。
如果您想要处理大量数据,如果您将路径传递给程序然后读取文件,则可能是最好的。您也可以通过sys.stdin.read()
使用标准输入但是您想通过通过管道some-other-program | python program.py f
或读取文件python program.py f < file.txt
在那里的东西。 (从理论上讲,你也可以使用stdin读取交互式数据,但不要这样做,而是使用输入。)