- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前正在自学 Python,只是想知道(引用下面我的示例)简而言之 sys.argv[1]
代表什么。它只是要求输入吗?
#!/usr/bin/python3.1
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print ('Hello there', sys.argv[1])
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
您可能被引导到这里,因为您在使用 sys.argv
的代码中询问 IndexError
。问题不在您的代码中;问题是您需要以一种使 sys.argv
包含正确值的方式运行程序。请阅读答案以了解 sys.argv
的工作原理。
如果您已经阅读并理解了答案,但在Windows上仍然遇到问题,请检查 Python Script does not take sys.argv in Windows解决了这个问题。如果您尝试从 IDE 内部运行程序,您可能需要特定于 IDE 的帮助 - 请搜索,但首先检查您是否可以从命令行成功运行程序。
最佳答案
我想指出,以前的答案对用户的知识做了很多假设。这个答案试图在更教程的层次上回答这个问题。
对于 Python 的每次调用,sys.argv
自动是一个字符串列表,表示命令行上的参数(以空格分隔)。名称来自C programming convention其中 argv 和 argc 代表命令行参数。
随着您对 Python 的熟悉,您会想要了解更多关于列表和字符串的信息,但与此同时,您需要了解以下几点。
您可以简单地创建一个脚本来打印所表示的参数。它还使用列表中的 len
函数打印参数的数量。
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
该脚本需要 Python 2.6 或更高版本。如果你调用这个脚本 print_args.py
,你可以用不同的参数调用它来看看会发生什么。
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
如您所见,命令行参数包括脚本名称但不包括解释器名称。从这个意义上说,Python 将脚本 视为 可执行文件。如果您需要知道可执行文件的名称(本例中为python),您可以使用sys.executable
。
您可以从示例中看到,如果用户使用引号封装的参数调用脚本,则可以接收包含空格的参数,因此您得到的是用户提供的参数列表。
现在在您的 Python 代码中,您可以使用这个字符串列表作为程序的输入。由于列表由从零开始的整数索引,因此您可以使用 list[0] 语法获取各个项目。例如,要获取脚本名称:
script_name = sys.argv[0] # this will always work.
虽然很有趣,但您很少需要知道您的脚本名称。要获取文件名脚本后的第一个参数,您可以执行以下操作:
filename = sys.argv[1]
这是一种非常常见的用法,但请注意,如果未提供参数,它将失败并返回 IndexError。
另外,Python 允许您引用列表的一部分,因此要获取 另一个列表 仅包含用户提供的参数(但没有脚本名称),您可以这样做
user_args = sys.argv[1:] # get everything after the script name
此外,Python 允许您将一系列项目(包括列表)分配给变量名称。因此,如果您希望用户始终提供两个参数,您可以将这些参数(作为字符串)分配给两个变量:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
因此,为了回答您的具体问题,sys.argv[1]
表示提供给相关脚本的第一个命令行参数(作为 string
)。它不会提示输入,但如果在脚本名称后面的命令行上没有提供任何参数,它将失败并返回 IndexError。
关于python - "sys.argv[1]"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117530/
目前我正在学习 C 并试图理解这些说明。它们真的不同吗? ++*argv *argv++ *(++argv) *(argv++) 谢谢! 最佳答案 后缀递增运算符的优先级高于指针取消引用运算符,而不是
我正在与在 Hostgator 共享主机上运行的 PHP CLI 的一个(也许)简单问题作斗争。一个简单的代码: 在我的本地机器上运行时以及其他几个 php 实例: php test.php arg
谁能解释一下原因 int main(int argc, const char * argv[]) { while (* argv) puts(* argv++); return 0 ;
从 K&R 的 C 书的第 5.10 章开始,argv 的概念被引入以允许命令行参数。 argv 是指向字符指针数组的指针。据此,以下代码如何检查提供的参数是否以连字符开头? (*++argv)[0]
我不明白 sys.argv 和 argv 之间的区别,网上没有任何东西给我我理解的概念。如果两者相同!我们什么时候使用 sys.argv 什么时候使用 argv ? 如果不是,sys.argv 是什么
我正在编写一个接受参数的 C 程序,char *argv[] 来决定运行哪个 exec()。我有 execlp(argv[1], argv[1], NULL) 可以正常工作。出于某种原因,execvp
char** argv 和 char* argv[] 有什么区别?在 int main(int argc, char** argv) 和 int main(int argc, char* argv[]
我目前有一个 python 脚本,可以在大型网络中完成一项非常有用的任务。我所做的是使用 lsof -iTCP -F 和其他一些选项来转储所有监听的 TCP 套接字。我能够得到 argv[0],这不是
为什么 argvs 的行为很奇怪?示例: 这将按预期工作,打印第一个参数的第一个字符。 printf("%c", *argv[1]); 但是,这将打印 ascii 表中的字符(又名“更大”,表示为数字
我做了一个小的重复异或加密器。您可以使用您选择的键对您选择的字符串进行异或运算,它可以选择将其输出到文件中。 无论何时使用单个单词(无空格)字符串和键运行程序,都没有问题。但是,只要字符串或键中有空格
我刚开始学习 C,想知道我应该在我的主要方法中使用其中的哪一个。有什么不同吗?哪个更常见? 最佳答案 由于您刚开始学习 C,我建议您首先真正尝试了解数组和指针之间的区别,而不是共同的东西。 在参数和数
所以我在编译器转换的函数中传递数组时在幕后阅读过 int myArray(int arr[]) 进入 int myArray(int *arr) 例如,大多数时候数组也会衰减为指针 arr[0] 与相
我正在编写一个小的 shell 程序,它接受一个命令并执行它。如果用户输入无效命令,则 if 语句返回 -1。如果命令正确,它就会执行命令,但是一旦它执行了命令,程序就会结束。我做错了什么是不执行它之
是否可以传入自定义参数列表? 与现实生活中的用例相比,更多是出于好奇,但例如,我可能希望在让 argparse 完成其工作之前将所有参数转换为小写。 最佳答案 Yes .只需传入要parse_args
我知道这个问题很基础,我也是新手,所以请帮我解决这个问题: 我有这个代码: int wmain(int argc, wchar_t *argv[]) { if (*argv[1] == L'-
这个问题在这里已经有了答案: Understanding slicing (38 个答案) 关闭 3 个月前。 我写了这段代码: #!/usr/bin/env python import sys i
我的程序获取主要参数,我的任务是检查用户是否在执行文件和参数之间输入了空格。 这是一个没有在 argv[0] 为 HW01 和 argv[1] 之间输入空格的人的例子/n: HW01/n 但是如果有人
我的 c 技能很生疏,所以如果这是一个愚蠢的问题,我深表歉意,但我什至没想过要寻找这个简单问题的答案。此代码编译时没有任何警告: #include int run_script( int argc,
这个问题在这里已经有了答案: Should I use char** argv or char* argv[]? (10 个答案) What does the 'array name' mean i
我有以下代码片段: int main(int argc, char *argv[]) { char line[MAXLINE]; long lineno = 0; i
我是一名优秀的程序员,十分优秀!