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

bra*_*jul 2 python stdin stdout parameter-passing

我是编程新手.我为此查看了教程,但我只是变得更加困惑.但我要做的是使用stdin和stdout接收数据,通过参数传递并打印出输出结果.

基本上,在命令行中,用户将输入和参数.

论点是:

i = sys.argv [1]

f = sys.argv [2]

w = sys.argv [3]
Run Code Online (Sandbox Code Playgroud)

然后使用if/else程序将根据上面选择的参数执行一些东西.

即:在命令行上,用户将输入脚本名称和f(for sys.argv[2:2])

$ test.py f
Run Code Online (Sandbox Code Playgroud)

.

if sys.argv == i:
     #execute some stuff

elif sys.argv == f:
      #execute some stuff

else: 
     sys.argv == w
     #execute some stuff
Run Code Online (Sandbox Code Playgroud)

使用stdin/stdout如何创建此开关,程序根据argv所选代码执行一段代码?任何输入将不胜感激.

syn*_*nym 8

看起来你有点困惑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]
Run Code Online (Sandbox Code Playgroud)

如果用少于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()
Run Code Online (Sandbox Code Playgroud)

您可以写入stdout via printsys.stdout.write()第一个将为您输入的每个字符串添加换行符.

如果您希望用户以交互方式输入内容,您应该使用input()(raw_input()在python2中.input()它将语句评估为您几乎总是不想要的python代码).

如果你想用大量数据做一些事情,如果你传递一个路径到你的程序然后读取一个文件,你可能是最好的.你也可以使用stdin via sys.stdin.read()但是你想通过管道传递一些东西some-other-program | python program.py f或者读一个文件python program.py f < file.txt.(从理论上讲,你也可以使用stdin来读取交互式数据但不要这样做,而是使用输入.)