我是Python的初学者,我在命令行运行我的函数有问题,通过IDLE它正在工作,但我需要在命令行中运行它,因为我必须从它可执行文件... < / p>
所以我的问题......我有这个
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
感谢您的帮助
答案 0 :(得分:5)
您的代码存在一些问题:
class
,而非Class
。class A
行之后必须有一个冒号:class A:
如果函数myFunction
应该是class A
的一部分,则必须缩进:
class A:
def myFunction(a,b)
课程方法应以self
作为第一个参数:def myFunction(self, a, b)
def myFunction(self, a,b)
之后必须有一个冒号:def myFunction(self, a,b):
您的函数必须至少有一行缩进代码。如果它什么都不做,你可以使用关键字`pass:
def myFunction(self, a,b):
pass
如果您想使用sys.argv
,首先必须使用sys
在代码的开头导入import sys
。
myFunction
是类的一部分,首先必须实例化它才能使用该函数:
Av = A()
Av.myFunction(a,b)
第一个命令行参数是sys.argv
的第二个条目,而不是第一个条目。
然而,在我看来你无论如何都不想上课,所以请写下:
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)