“sys.argv”是什么意思?

2024-04-18 12:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习代码,我被其中一行代码搞糊涂了,那就是:

things = [float(arg) for arg in sys.argv[1:]]
Omega_a, Omega_b, Delta_a, Delta_b, \
init_pop_a, init_pop_b, tstep, tfinal = things

我在网上搜索并试图理解sys.arg的含义,以下是我的理解:

所以sys.argv[0]是文件名,而sys.argv[1:]是用户应该给出的其余参数。我不确定我是否理解对了,如果是的话,那么我不明白为什么不能像这样:

Omega_a = input() 
Omega_b = input()
etc...

这两种给出参数的方法有什么区别?

另外,如果我运行代码(按F5键),Python shell会给出如下错误:

Traceback (most recent call last):

File "C:\Users\testcode.py", line 55, in <module>
init_pop_a, init_pop_b, tstep, tfinal = things
ValueError: need more than 0 values to unpack

在它给我一个错误之前,我甚至没有机会给出参数(sys.argv[1:])。所以我上网搜索。看起来我需要在cmd中运行这段代码,这让我更加困惑,为什么要运行它,我应该如何在cmd中运行它?


Tags: 代码ininput参数init错误sysarg
3条回答

所有其他的答案都解释得很好,但我认为缺少一个基本术语。我只是想补充一下。。。

input()告诉程序从stdin读取。

就像从文件中读取一样,它是一个流。input()调用读取,直到到达换行符。您还可以读取stdin,直到到达EOF(end of file)。

另一方面,sys.argv只是一个列表,您可以从系统中获得该列表,其中包含用于从shell调用命令的所有参数。从技术上讲,对maximum number of arguments that can be passed on the command line有某种类型的限制(在逐个系统的基础上),这就是xargs命令存在的原因(使用成批参数调用命令,拆分)。

标准物质

echo "I am stdin" | myCommand.py

。。。这与在程序运行后执行此操作的概念相同:

read_from_stdin = input()

参数

myCommand.py "I am an arg"

最后,从stdin/input()中读取不会自动将单词分成一个列表。你可以使用一些额外的逐行阅读方法。但也可以按字符、一次读取特定数量的字符或一次读取全部数据。

sys.argv称为“命令行参数”。如果要传递它们,应该从命令行运行脚本。在Windows系统上,该命令如下所示:

cmd> python C:\Users\testcode.py arg1 args2

其中“cmd>;”是使用“开始”->;“运行”后得到的提示。

区别在于,sys.argv(命令行)参数是在程序运行之前(启动时)给定的:

python testcode.py arg1 arg2 arg3 arg4 and so on ...

这将导致您的变量为:

Omega_a = 'arg1'
Omega_b = 'arg2'
Delta_a = 'arg3'
Delta_b = 'arg4'
init_pop_a = 'and'
init_pop_b = 'so'
tstep = 'on'
tfinal = '...'

input()是在程序运行时给出的。

由于你没有用参数启动程序,它会给你错误, 因为没有足够(确切地说是0)的参数被解压到变量中。

相关问题 更多 >