我正在使用类似的方法从我的shell脚本调用python函数:
python -c 'import foo; print foo.hello()'
但我不知道在这种情况下我如何将参数传递给python脚本,也可以从命令行调用带参数的函数?
答案 0 :(得分:7)
python -c 'import foo, sys; print foo.hello(); print(sys.argv[1])' "This is a test"
或
echo "Wham" | python -c 'print(raw_input(""));'
还有argparse(py3链接)可用于捕获参数,例如-c
也可以在sys.argv[0]
找到。
第二个图书馆确实存在但是被推文出来,称为getopt.getopt
。
答案 1 :(得分:4)
您不希望在shell脚本中执行此操作。
试试这个。创建一个名为“hello.py”的文件,并将以下代码放在该文件中(假设您使用的是unix系统):
#!/usr/bin/env python
print "Hello World"
并在你的shell脚本中写下一些内容
#!/bin/sh
python hello.py
你应该在终端看到Hello World
。
这就是你应该如何在shell / bash中调用脚本。
主要问题:你如何传递论据?
举个简单的例子:
#!/usr/bin/env python
import sys
def hello(name):
print "Hello, " + name
if __name__ == "__main__":
if len(sys.argv) > 1:
hello(sys.argv[1])
else:
raise SystemExit("usage: python hello.py <name>")
我们预计论证的len至少为两个。与shell编程一样,第一个(索引0)始终是文件名。
现在修改shell脚本以包含第二个参数(名称),看看会发生什么。
还没有测试我的代码,但从概念上来说,你应该如何去做
编辑:
如果您只有一行或两个简单的python代码,请确保-c
正常工作并且很整洁。但是如果您需要更复杂的逻辑,请将代码放入模块(.py文件)中。
答案 2 :(得分:-1)
您需要创建一个.py文件。 在你用这种方式打电话之后:
python file.py argv1 argv2
在你的文件中,你有sys.argv列表,谁给你argvs列表。