Python - 如何使用stdin / stdout在命令行上解析argv?

时间:2016-04-17 10:46:40

标签: python parameter-passing stdout stdin

我是编程新手。我为此查看了教程,但我只是变得更加困惑。但我想要做的是使用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执行一段代码?任何输入将不胜感激。

1 个答案:

答案 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个参数调用程序,

将抛出异常。

有一些库可以帮助您解析argparseclick等参数。但是对于简单的情况,只使用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()

您可以通过printsys.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读取交互式数据,但不要这样做,而是使用输入。)