如何调用python函数并从命令行提供其参数?

时间:2014-06-10 13:18:57

标签: python shell command-line

让我们说,我有一个python脚本(test.py),它包含一个带字符串并打印回来的函数,如下所示

def pri(str):
    print str

如何从命令行调用此函数(pri)? 我试过了:

$python test.py pri(blablalba)

但是我收到以下错误: 缺少字符串的结尾

5 个答案:

答案 0 :(得分:3)

你可以像任何命令行程序一样调用python程序:

python test.py blablabla

然后在程序内部执行此操作:

import sys
print sys.argv

sys的argv变量是通过命令行传递给被调用程序的所有参数的列表。因此,如果您想调用特定的参数编号,您会将其视为列表。如果你想让一个方法打印出那些参数,你需要将它们传递给方法或让方法使用该变量。在你的情况下,你会想要这样的东西:

import sys

def pri(str):
    print str

for each in sys.argv[1:]:
    pri(each)

答案 1 :(得分:2)

您可以这样调用它(假设您的函数保存在名为test.py的文件中)

python -c "from test import pri; pri('test')"

这将输出单词test

如果您的文件的名称不是test.py,请在导入语句中替换单词test

>python -c "from test import pri; pri('test')"
test

答案 2 :(得分:0)

import sys
print (sys.argv[1])

您需要使用sys.argv[1]

如果将其保存在脚本中,请调用pri.py

从命令行使用python pri.py hello,它将输出hello

要打印多个单词:

import sys

def pri(s):   
    print s
if __name__=="__main__":
    s = " ".join(sys.argv[1:])
    pri(s)

答案 3 :(得分:0)

您应该使用sys.argv。 argv是通过命令行传递的所有参数的列表。

试试这个:

import sys

def pri(s):
    print s

pri(sys.argv[1])

您可以执行python test.py blablabla

答案 4 :(得分:0)

我会坚持你使用if __name__ == '__main__'构造。它允许您的模块仍可导入,以便从命令行使用。

对于您的用例,它将类似于

import sys

def pri(s):
   # you stuff

# other stuff

if __name__ == '__main__':
    # test presence of params and display comprehensive errors if not applicable
    # ...
    pri(sys.argv[1])

这样python test.py blabla调用pri('blabla'),但您可以在另一个python模块中执行import test,而不会自动调用pri