如何给命令行调用的python -c传递参数?sys.argv使用遇异常
命令行给Python传参的正确方式
你遇到的问题核心是搞混了命令行参数和标准输入的区别:sys.argv 用来获取启动Python时直接跟在命令后的参数,管道(|)传递的内容属于标准输入,不会被sys.argv捕获,所以你之前的命令里sys.argv只有['-c'](-c是告诉Python执行后面字符串代码的参数)。
正确传参方式分两种:
1. 直接传递命令行参数
如果要把a b c作为命令行参数传给Python,直接把参数写在命令末尾即可:
python -c "import sys; print([[str(x), a] for x,a in enumerate(sys.argv)])" a b c
执行后会输出:
[['0', '-c'], ['1', 'a'], ['2', 'b'], ['3', 'c']]
2. 读取管道传递的标准输入
如果是想用管道传递内容(比如echo "a b c"的输出),需要用sys.stdin来读取,而不是sys.argv:
echo "a b c" | python -c "import sys; print([[str(x), a] for x,a in enumerate(sys.stdin.read().split())])"
执行后会输出:
[['0', 'a'], ['1', 'b'], ['2', 'c']]
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

