Python自学笔记(二)命令行参数使用

前言

  当我们在写完多个pyhon脚本时,怎么去使用这些脚本也成为一个问题。我们写的这些脚本对于使用者来说是封闭的存在,为了让我们的脚本文件更加灵活,我们可以通过命令行参数给脚本传入相应的数据并运行,而不是单纯地只是对于一个脚本的打开和关闭。


文章目录

一、命令行参数是什么

1、exe文件和脚本文件

  exe文件: 想必都不陌生吧,一种二进制文件。它是Windows系统中的执行文件,它可以加载到内存中,并由操作系统加载程序执行。它是由一堆程序代码编译最终而成的二进制可执行文件,开放给用户就是我们常说的软件,在电脑中表现形式就是一个exe文件+一堆配置文件(看不同软件而定)。如记事本程序notepad.exe ,双击后可以生成一个界面,可以用来编辑,保存等。
  脚本文件: 可直接运行的纯文本文件,它和exe文件的不同是可以用解释器直接解释运行,而不用像exe文件那样需要编译器经过编译、汇编、链接等一堆操作生成。当然,好处是exe保密性好,文件小等。
这里再抠一个点吧,就是exe文件是可加载到window操作系统的二进制文件,只使用在windows系统中。Linux系统下万物皆文件,不需要扩展名,只要知道是否是可执行文件就可运行啦。bin文件或者hex文件这两种二进制文件则常见于单片机(也可以当成微型计算机)。

2、可执行文件的命令行参数

  了解了这两种文件的区别后,我们快捷键【win+R】,输入cmd打开dos窗口,举例我们打开一个计算器,输入:calc.exe,计算器应用程序就被启动,原理和我们直接鼠标双击快捷方式打开软件一致。
Python自学笔记(二)命令行参数使用
  有些软件的设计是允许我们传递参数的,我们打开软件时是可以传递参数给exe文件的,比如我们可以玩玩电脑的shutdown.exe,输入:

shutdown.exe /s /t 3600

  为了不搞事,这里命令意思是设置我们的电脑在3600s(即一小时)后关机,这里很明显就给shutdown.exe传入三个参数 /s、/t、3600,并且这三个参数是可变的。回车后我们可以发现电脑警告我们60分钟后关机。
Python自学笔记(二)命令行参数使用
  当然这是可以撤回的,运行这条命令就行了。

shutdown.exe /a

Python自学笔记(二)命令行参数使用
  写着写着发现个有趣的东西,我们给shutdown.exe文件新建个快捷方式,鼠标右击->属性->目标,我们可以空格,输入参数,这样双击该快捷方式的效果和直接写命令的效果一致。
Python自学笔记(二)命令行参数使用
  说到这,那python的文件也是可执行脚本文件,最终我们当然也可以也通过这样的方式去运行.py文件。
Python自学笔记(二)命令行参数使用

二、Python命令行参数的使用

  要让我们写的代码接受到参数,python给我们提供了系统包,需要导入sys模块包。argv即为存放参数的列表,我们代码中直接将argv打印出来。
main.py

import sys

print("main:")
print(sys.argv)

  打开dos窗口,注意需要改变路径名,即cd到自己放.py文件的路径。然后输入命令,给main.py文件传入hello和123两参数。运行结果如下图。python为解释器,所以argv[0]为文件名,argv[1]为hello,argv[2]为123,以此类推。我们也可用len(argv)获得参数的个数。Python自学笔记(二)命令行参数使用
  这里只运行了一个main.py文件,但工程有多个.py文件时,并且每个.py文件相互关联,这时候就要涉及到文件将参数的传递了。我们可以利用os模块完成这个功能。在main代码中,我们打印dos窗口传过来的命令,在func中,我们打印main传过来的命令,代码如下图所示。
Python自学笔记(二)命令行参数使用
  运行结果如下,因为func.py文件是放在dir文件夹内的,所以需要用路径进行定位,这里的.(点)表示当前路径,也就是存放main的路径。
Python自学笔记(二)命令行参数使用

三、其他语言命令行参数

说完了pyhton,因为其他语言也有异曲同工之妙,所以也在这做个小结吧。

1.c语言

  对于c语言,运行程序的起点在main函数,本质上main函数也带有参数,argc表示参数个数,而argv为二维数组,存放参数字符串。(因为python可以用len直接求参数个数,c语言并没有,所以多一个argc参数来表示个数,还是很人性的~),代码如下,可将参数全部输出。

include <stdio.h>
include <stdlib.h>

int main(int argc,char *argv[])
{
    printf("%s\n",argv[0]);
    /*读取参数*/
    int i = 1;
    while(i < argc)
    {
        printf("%s\n",argv[i]);
        i++;
    }
    return 0;
}

2.shell脚本和bat脚本

  shell和bat脚本命令行参数传入都一样的。脚本读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中shell脚本中以$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推。bat脚本则通过%1,%2,%3表示。
shell脚本:(/bin/bash是shell解释器,echo为输出到显示器)

#!/bin/bash
echo $1 $2 $3

bat脚本:

@echo off
echo %1 %2 %3
Pause

总结

  这篇文章首先对命令行函参数做了一些解释,然后用python做了一个简单实现,最后总结了其他语言的命令行参数实现方法。先把简单的东西理解了,才能为复杂的工程打好基础~


Tips:本人能力有限,如有错误之处麻烦指出。放弃不难,但坚持一定很酷!
上一篇:sys模块


下一篇:python《信息安全专业导论》期末考试内容(四)