脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python运行或调用另一个py文件或参数方式

python运行或调用另一个py文件或参数方式

2022-08-26 17:12SunseTor Python

这篇文章主要介绍了python运行或调用另一个py文件或参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python运行或调用另一个py文件或参数

 

1. 运行另一个py文件

(1)在file_A.py中运行file_B.py文件

import os
os.system("python file_B.py para_a1 para_a2")
#其他形式
os.system("python file_B.py %s" % para_A)
os.system("python file_B.py " + para_A)

需要注意文件路径的写法,因为我是在docker中运行文件,文件名前面需要加/,如os.system("python /file_B.py")

(2)file_B.py使用file_A.py传递的参数

import sys
print(sys.argv)
#由打印的结果可知,sys.argv[1:]是命令行传递的参数,sys.argv[0]是命令行运行的文件名
para_B = sys.argv[1]

 

2. 引用另一个py文件中的变量

from file_A import df_A

 

python调用自己写的py文件

 

python如何调用自己写的py文件呢?

同一个目录下直接写import xx就好了,xx为自己要调用的模块名字,虽然会有下划线报错,其实,没有错,仍然可以调用,之前一直都被报错吓住了

 

如果是不同目录怎么调用呢?

那就把需要调用的那个目录添加一下,比如调用C:xxxa.py

那就添加一下c:xxx路径(windows的路径和linux的路径符号不同,/,注意区别)

然后import a就行了,前面写r是为了告诉python这是路径,别把 等特殊组合给转译了,

如果同c:xxx目录下有多个文件,比如a.py,b.py等等,也可以直接导入了,因为这是告诉python去这个文件夹寻找包文件

import sys
sys.path.append(r"C:xxx")
import a
import b

 

如果需要调用的多个文件在多个目录呢?

当然可以多次写sys.path.append(r"C:xxx")来添加多个目录,

但是这样很麻烦,如果文件距离很近,比如这样就没有必要写

python运行或调用另一个py文件或参数方式

解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法

python运行或调用另一个py文件或参数方式

也可以这样,表示bbb是一个包,bb是bbb的子包,b是bb包的内部的方法

python运行或调用另一个py文件或参数方式

然后如果你需要调用a.py与b.py,就可以

testcode.py

import aaa.a
import bbb.bb.b
import ccc.c

如果你在c.py文件,想要调用a.py,b.py只需要用到步骤2的知识即可,比如

c.py

import sys
#添加上级目录
sys.path.append("..//")
import aaa.a
import bbb.bb.b

 

关于__init__.py的解释

作用是将文件夹变为一个Python模块,导入包时,事实上是导入了它的__init__.py文件

__init__.py 文件可以为空,但是也可以添加如下两个功能

1.初始化包中各个模块,批量导入

pack包,配置__init__.py

 
import a
import b

导入pack包

访问__init__.py文件中的引用文件,需要加上包名

import pack
print(pack.a,pack.b)

2.__init__.py中的__all__,全部导入所声明的模块

此时导入pack包就相当于导入了a.py,b.py,c.py

pack包,配置__init__.py

__all__ = ["a", "b", "c"]

调用

from pack import *

 

关于sys.path的解释

当导入模块时,解释器按照sys.path列表中的目录顺序来查找文件。

print(sys.path)

会打印出一个list列表,表示引入文件时查找的文件目录,第一个元素空字符表示当前目录 

 

关于pyc与pyo文件

pyc就是py编译时生成的字节码文件,以后每次导入都会执行pyc,当py文件更新时pyc也会更新

如果解释器添加-o命令,py编译时会生成pyo文件,它相比pyc去掉了断言(assert)、断行号以及其他调试信息,运行速度更快

如果使用-OO选项,生成的pyo文件会忽略文档信息

 

模块导入时内部的原理

import可导入的对象可以是以下类型:

  • 模块文件(.py文件)
  • C或C++扩展(已编译为共享库或DLL文件)
  • 包(包含多个模块)
  • 内建模块(使用C编写并已链接到Python解释器中)
  • 理解为后缀就是.py、.pyo、.pyc、.pyd、.so、.dll

解释器工作:

1.根据导入的文件名创建命名空间(用来访问文件内部属性与方法)

2.在命名空间内执行源代码

3.创建一个源代码文件的对象,这个对象引用对应的命名空间,管理模块的内部函数与变量

4.一个模块可以多次导入,但是后面导入的模块只执行第三步

sys.modules可以打印出导入的模块名与模块对象的映射

因此可以理解导入文件的三种方式:

  • import a.b:把a.b导入全局命名空间,想要调用c方法需要a.b.c
  • from a import b:把b导入全局命名空间,b.c
  • from a.b import c:把b的属性c直接导入命名空间

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文地址:https://blog.csdn.net/SunseTor/article/details/108470991

延伸 · 阅读

精彩推荐
  • Pythonpython中正则表达式与模式匹配

    python中正则表达式与模式匹配

    在之前找工作过程中,面试时经常被问到会不会python,懂不懂正则表达式。这篇文章主要介绍了python中正则表达式与模式匹配,需要的朋友可以参考下...

    没落骑士6832021-06-24
  • PythonTensorFlow Autodiff自动微分详解

    TensorFlow Autodiff自动微分详解

    这篇文章主要介绍了TensorFlow Autodiff自动微分详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Marks & Co3612020-07-07
  • PythonDjango框架用户注销功能实现方法分析

    Django框架用户注销功能实现方法分析

    这篇文章主要介绍了Django框架用户注销功能实现方法,结合实例形式分析了基于Django框架的删除cookie实现用户注销功能的相关操作技巧,需要的朋友可以参考...

    学习笔记6665472021-06-30
  • Python深入源码解析Python中的对象与类型

    深入源码解析Python中的对象与类型

    这篇文章主要介绍了深入源码解析Python中的对象与类型,涉及到对象的引用计数方法和类型的定义等深层次内容,需要的朋友可以参考下 ...

    凌岳_wklken2462020-08-04
  • Python基于Python实现通过微信搜索功能查看谁把你删除了

    基于Python实现通过微信搜索功能查看谁把你删除了

    这篇文章主要介绍了基于Python实现微信搜索查看谁把你删除了的相关资料,需要的朋友可以参考下 ...

    啊莫4942020-08-10
  • PythonPython全栈之正则表达式

    Python全栈之正则表达式

    这篇文章主要为大家介绍了Python正则表达式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    熬夜泡枸杞7402022-03-10
  • PythonPyMySQL实现增删查改的简单使用

    PyMySQL实现增删查改的简单使用

    这篇文章主要介绍了PyMySQL实现增删查改的简单使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    Ma Sizhou11942021-10-31
  • PythonPython开发微信公众平台的方法详解【基于weixin-knife】

    Python开发微信公众平台的方法详解【基于weixin-knife】

    这篇文章主要介绍了Python开发微信公众平台的方法,结合实例形式分析了Python基于weixin-knife针对微信公众平台消息、接口调用及事件处理的基本操作技巧与相...

    yueguanghaidao4872020-11-24