python运行或调用另一个py文件或参数方式
作者:SunseTor 发布时间:2023-10-26 02:04:47
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:\xxx\a.py
那就添加一下c:\xxx路径(windows的路径和linux的路径符号不同\\,/,注意区别)
然后import a就行了,前面写r是为了告诉python这是路径,别把\n等特殊组合给转译了,
如果同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")来添加多个目录,
但是这样很麻烦,如果文件距离很近,比如这样就没有必要写
解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法
也可以这样,表示bbb是一个包,bb是bbb的子包,b是bb包的内部的方法
然后如果你需要调用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.cfrom a import b
:把b导入全局命名空间,b.cfrom a.b import c
:把b的属性c直接导入命名空间
来源:https://blog.csdn.net/SunseTor/article/details/108470991
猜你喜欢
- 在机房收费系统中,有几处这样的情况:起始日期和终止日期,相信聪明的你肯定可以想象出为什么要有两个日期控件!是的,就是从一张表中查找出在这两个
- 1、实现目标编写一个命令行通讯录程序,可以添加、查询、删除通讯录好友及电话2、实现方法创建一个类来表示一个人的信息。使用字典存储每个人的对象
- 1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
- 1、前言最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那
- 一、用法字符串常量:import stringprint(string.ascii_lowercase)print(string.ascii
- 本文实例为大家分享了readAsDataUrl方法预览图片的具体代码,供大家参考,具体内容如下<html> <head&
- 今日需求其实就是把Word中的表格转到Excel中,顺便做一个调整。这个需求在实际工作中,很多人还是经常碰到的!如果单单是两个表格,那只要简
- 我以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明:vi /usr/local/mysql/bin/m
- 导包效果展示以下截图显示的撤回消息类型依次是文字消息、微信自带表情、图片、语音、定位地图、名片、公众号文章、音乐、视频。有群里撤回的,也有个
- 前言这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式。这篇通过几个练习,简单了解下替换和
- 很多的网站都有记数器,用来记录网站的访问量,这给网站管理员即时了解本网站的运行及访问情况提供了很多的方便。笔者研究过很多用ASP编写的计数器
- 一、背景及研究现状在我国互联网的发展过程中,PC互联网已日趋饱和,移动互联网却呈现井喷式发展。数据显示,截止2013年底,中国手机网民超过5
- 一、特效预览处理前处理后细节放大后二、程序原理将图片所在的 256 的灰度映射到相应的字符上面也就是 RGB 值转成相应的字符然后再将字符其
- 引言最常见的闭包 (Closure) 范式大家都很熟悉了:(function() {// ...})(); 很
- VIM python下的一些关于缩进的设置:第一步: 打开终端,在终端上输入vim ~/.vimrc,回车。 第二步: 添加下面的文段:se
- 问题在一个python web应用中需要定时执行一些任务,所以用了APScheduler这个库。又因为是用flask这个web框架,所以用了
- 为什么要使用滤波消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感
- 或许你已经看过很多关于CSS3动画的技术,包括前端观察之前发表的一些,那么现在就情看一看CSS3动画的魅力吧。这里是一辑47个令人瞠目结舌的
- 本文实例讲述了Python基于递归算法求最小公倍数和最大公约数。分享给大家供大家参考,具体如下:# 最小公倍数def lcm(a, b, c
- codecs在读取文件时,发生错误:UnicodeDecodeError: 'utf-8' codec can't