如何使用 Windows 命令行中的参数运行 Python 脚本

这是我的 python hello.py脚本:

def hello(a,b):
print "hello and that's your sum:"
sum=a+b
print sum
import sys


if __name__ == "__main__":
hello(sys.argv[2])

问题是它不能在 windows 命令行提示符下运行,我使用了以下命令:

C:\Python27>hello 1 1

但是不幸的是,它没有工作,有人可以帮忙吗?

292026 次浏览

To execute your program from the command line, you have to call the python interpreter, like this :

C:\Python27>python hello.py 1 1

If you code resides in another directory, you will have to set the python binary path in your PATH environment variable, to be able to run it, too. You can find detailed instructions here.

Your indentation is broken. This should fix it:

import sys


def hello(a,b):
print 'hello and thats your sum:'
sum=a+b
print sum


if __name__ == "__main__":
hello(sys.argv[1], sys.argv[2])

Obviously, if you put the if __name__ statement inside the function, it will only ever be evaluated if you run that function. The problem is: the point of said statement is to run the function in the first place.

  • import sys out of hello function.
  • arguments should be converted to int.
  • String literal that contain ' should be escaped or should be surrouned by ".
  • Did you invoke the program with python hello.py <some-number> <some-number> in command line?

import sys


def hello(a,b):
print "hello and that's your sum:", a + b


if __name__ == "__main__":
a = int(sys.argv[1])
b = int(sys.argv[2])
hello(a, b)
import sys


def hello(a, b):
print  'hello and that\'s your sum: {0}'.format(a + b)


if __name__ == '__main__':
hello(int(sys.argv[1]), int(sys.argv[2]))

Moreover see @thibauts answer about how to call python script.

Here are all of the previous answers summarized:

  • modules should be imported outside of functions.
  • hello(sys.argv[2]) needs to be indented since it is inside an if statement.
  • hello has 2 arguments so you need to call 2 arguments.
  • as far as calling the function from terminal, you need to call python .py ...

The code should look like this:

import sys
def hello(a, b):
print "hello and that's your sum:"
sum = a+b
print sum


if __name__== "__main__":
hello(int(sys.argv[1]), int(sys.argv[2]))

Then run the code with this command:

python hello.py 1 1

There are more than a couple of mistakes in the code.

  1. 'import sys' line should be outside the functions as the function is itself being called using arguments fetched using sys functions.
  2. If you want correct sum, you should cast the arguments (strings) into floats. Change the sum line to --> sum = float(a) + float(b).
  3. Since you have not defined any default values for any of the function arguments, it is necessary to pass both arguments while calling the function --> hello(sys.argv[2], sys.argv[2])

    import sys def hello(a,b): print ("hello and that's your sum:") sum=float(a)+float(b) print (sum)

    if __name__ == "__main__": hello(sys.argv[1], sys.argv[2])

Also, using "C:\Python27>hello 1 1" to run the code looks fine but you have to make sure that the file is in one of the directories that Python knows about (PATH env variable). So, please use the full path to validate the code. Something like:

C:\Python34>python C:\Users\pranayk\Desktop\hello.py 1 1

I found this thread looking for information about dealing with parameters; this easy guide was so cool:

import argparse


parser = argparse.ArgumentParser(description='Script so useful.')
parser.add_argument("--opt1", type=int, default=1)
parser.add_argument("--opt2")


args = parser.parse_args()


opt1_value = args.opt1
opt2_value = args.opt2

runs like:

python myScript.py --opt2 = 'hi'