在命令行中运行python函数

时间:2013-12-31 16:04:28

标签: python

我是Python的初学者,我在命令行运行我的函数有问题,通过IDLE它正在工作,但我需要在命令行中运行它,因为我必须从它可执行文件... < / p>

所以我的问题......我有这个

文件名test.py

class A

def myFunction(a,b)
print a,b

myFunction从IDLE调用Class,它足以编写myfunction(a,b),但是从命令行我不知道该怎么做

我的目标是

使用命令从命令行运行函数: name_of_the_file arg1 arg2 - &gt;测试b

我看着我想到处都尝试了一切,我发现最常见的是将此命令添加到我的功能

if __name__ == '__main__':
    a = sys.argv[0]
    b = sys.argv[1]
    myFunction(a,b)

所以它是

class A:
    some process which calls myFunction
def myFunction(a,b)
    print a,b
if __name__ == '__main__':
    a = sys.argv[0]
    b = sys.argv[1]
    myFunction(a,b)

然后我从命令行用test a b调用它,但我只得到了错误

我使用Python 2.7

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

您的代码存在一些问题:

  1. Python区分大小写。关键字为class,而非Class
  2. class A行之后必须有一个冒号:class A:
  3. 如果函数myFunction应该是class A的一部分,则必须缩进:

    class A:
        def myFunction(a,b)
    
  4. 课程方法应以self作为第一个参数:def myFunction(self, a, b)

  5. def myFunction(self, a,b)之后必须有一个冒号:def myFunction(self, a,b):
  6. 您的函数必须至少有一行缩进代码。如果它什么都不做,你可以使用关键字`pass:

    def myFunction(self, a,b):
        pass
    
  7. 如果您想使用sys.argv,首先必须使用sys在代码的开头导入import sys

  8. myFunction是类的一部分,首先必须实例化它才能使用该函数:

    Av = A()
    Av.myFunction(a,b)
    
  9. 第一个命令行参数是sys.argv的第二个条目,而不是第一个条目。

  10. 然而,在我看来你无论如何都不想上课,所以请写下:

    def myFunction(a,b):
        pass
    
    if __name__ == '__main__':
        a = sys.argv[1]
        b = sys.argv[2]
        myFunction(a,b)
    

    您也可以使用python file.py arg1 arg2调用python脚本。如果你想在开头省略python那么你可以(在类似unix的系统中)在python文件的第一行添加一个shebang:#!/usr/bin/env python。然后,只要执行标志设置为chmod +x file.py,就可以像./file.py arg1 arg2一样调用它。

答案 1 :(得分:0)

函数和方法有两个不同的东西。 了解更多相关信息here。必须使用父类作为第一个参数调用方法:

class Fruit:
    def Taste(self):
        print "Yuck!"

# Call it
Fruit().Taste()

你可以用这种方式传递argv:

MyClass(*args, **kwargs).MyMethod(argv, **kwargs)

<强> 修改

我是否正确地假设您要将2个(或更多)参数传递给命令行,以便它们可以传递给函数并执行?如果是的话,我会在这里尝试一些简单的事情:

from sys import argv

try:
    a = argv[1]
    b = argv[2]
except IndexError:
    print "Enter both arguments"

class Integer:
    def Check(self, z):
        if int(z) < 0:
            print z, "is a negative integer"
        elif int(z) > 0:
            print z, "is a positive integer"
        else:
            print z, "is not an integer"

# Make instance
myclass = Integer()

# Call methods
myclass.Check(a)
myclass.Check(b)