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

目录
  • python运行或调用另一个py文件或参数
    • 1. 运行另一个py文件
    • 2. 引用另一个py文件中的变量
  • python调用自己写的py文件
    • python如何调用自己写的py文件呢?
    • 如果是不同目录怎么调用呢?
    • 如果需要调用的多个文件在多个目录呢?
    • 关于__init__.py的解释
    • 关于sys.path的解释
    • 关于pyc与pyo文件
    • 模块导入时内部的原理

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.c
  • from a import b:把b导入全局命名空间,b.c
  • from a.b import c:把b的属性c直接导入命名空间

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决python调用自己文件函数/执行函数找不到包问题

    写python程序的时候很多人习惯创建一个utils.py文件,存放一些经常使用的函数,方便其他文件调用,同时也更好的管理一些通用函数,方便今后使用.或是两个文件之间的class或是函数调用情况. 就像下面的工程目录一样: 工程目录 Project\ ... src\ main.py utils.py test.py ... python调用其他文件中的函数 在main.py文件中加入一下语句即可调用utils.py下面的函数:'' import src.utils as utils X, y

  • python怎么调用自己的函数

    在python中,除了调用下载的扩展库之外,还可以自定义函数,方便自己. 把基础模块放在固定文件夹(或相对固定文件夹),使用sys.append(r'自定义的模块路径') 实例如下: 1.在E:\pycharm新建hello.py实现基础功能函数(定义一个hello()函数) 2. 调用自定义的函数 3. 运行结果为: 内容扩展: Python中如何调用自己写的函数 例如我现在写了一个KNN的函数,如下: import numpy as np def createDataSet(): group

  • 完美解决pycharm导入自己写的py文件爆红问题

    用pycharm开发时,在导入自己写的python文件时出现模块名爆红的情况,而且后面每次调用文件里的函数都没有没有提示,必须自己手动输入,虽然正常使用没什么问题,但奈何不了强迫症 解决办法: 在此处选择新建项目,并将所有的文件拖进新的文件夹即可. 以上这篇完美解决pycharm导入自己写的py文件爆红问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python 跨.py文件调用自定义函数说明

    0 前言 os.chdir() :用于改变当前python工作的目录到指定的路径 sys.path:是python搜索模块的一个路径集,为list,自定义的包可以把存放路径加进去,之后直接调用包名就行了. 1 同一文件夹 一般当前的工作路径是在搜索路径里面,所以不用sys.path.append,如果调用包的时候报错,先使用sys.path查看当前路径在不在list里,不在list里加进去才能直接调用自定义包. 一个文件夹内有两个 .py 文件: exe101.py FileWriteAbout

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

    目录 python运行或调用另一个py文件或参数 1. 运行另一个py文件 2. 引用另一个py文件中的变量 python调用自己写的py文件 python如何调用自己写的py文件呢? 如果是不同目录怎么调用呢? 如果需要调用的多个文件在多个目录呢? 关于__init__.py的解释 关于sys.path的解释 关于pyc与pyo文件 模块导入时内部的原理 python运行或调用另一个py文件或参数 1. 运行另一个py文件 (1)在file_A.py中运行file_B.py文件 import

  • python如何在一个py文件中获取另一个py文件中的值(一个或多个)

    目录 如何在一个py文件中获取另一个py文件中的值(一个或多个) 在一个py文件中调用另一个py文件中的变量 一.目的 二.解决方案 三.实例演示 如何在一个py文件中获取另一个py文件中的值(一个或多个) 创建两个py文件分别为z1.py 和 z2.py,运行z1.py时,将z1中的值传递给z2(z2获取z1中的值) z1.py import os   key = '123' if __name__ == '__main__':     os.system("python z2.py {}&q

  • Python中py文件引用另一个py文件变量的方法

    最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requests r = requests.get("http://www.baidu.com") r.encoding = r.apparent_encoding demo = r.text demo beauful1代码: from bs4 import BeautifulSoup soup = BeautifulSoup(demo,"

  • 从头学Python之编写可执行的.py文件

    Python可是真强大.但他具体是怎么强大的,让我们一点一点来了解吧(小编每天晚上下班回家会抽时间看看教程,多充实下自己也是好的). 废话不多说,就讲一下这个背景吧: 事情是这个样子的~本着好学的精神,咱就买了本书,学习python结果呢,发现python的教程都是一个样子滴,上来的第一个helloworld都是通过IDLE来实现的.这个就比较让我头疼了,这个太简单了啊.可是我该肿么脱离IDLE来编写自己的python模块呢.于是乎,就有了这个文章 一.先讲一下我的操作步骤吧,后面再统一简单介绍

  • 图文详解Python如何导入自己编写的py文件

    目录 一. 想要实现的效果 二. 实现的方法 三. 进阶用法 四. 使用_init_.py控制导入某文件夹时执行的操作 总结 一. 想要实现的效果 新建文件夹将自编模块集中管理 可在其它py文件内import 自编模块,像import第三方库一样 二. 实现的方法 步骤1:将编号的模块 *.py放入文件夹,在我计算机中是:F:\OneDrive\PythonPrj\_myFunction 步骤2:新建用户/系统环境变量. 变量名:PYTHONPATH 变量值:文件夹路径 然后就可以实现想要的效果

  • 浅谈如何在bat文件中调用另一个bat文件

    目录 情景一:两个bat文件在同一个目录下 情景二:两个bat文件不在同一个目录下 情景三:开启一个新的cmd窗口来运行另一个bat文件 情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调用b.bat,如下. a.bat @echo off echo I am a.bat- echo now run the b.bat call b.bat echo over b.bat @echo off echo I am b.bat- 在

  • 教你cmd bat文件中调用另一个bat文件的方法

    目录 情景一:两个bat文件在同一个目录下 情景二:两个bat文件不在同一个目录下 情景三:开启一个新的cmd窗口来运行另一个bat文件 情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调用b.bat,如下. a.bat @echo off echo I am a.bat- echo now run the b.bat call b.bat echo over b.bat @echo off echo I am b.bat- 在

  • 一个Js文件函数中调用另一个Js文件函数的方法演示

    我们知道,在html中,利用<script language="javascript" type="text/javascript" src="./script.js"></script>引入的两个js是不可以相互调用的.那么该如何解决呢?当然,你可以将代码通通copy过来,也许你并不喜欢这样. 例如有这样一个html,里面有一个按钮,当按下时调用b.js文件中的方法b().而b()中又要调用a.js文件中的方法a().若

  • 如何在python中执行另一个py文件

    使用命令:os.system('python file_name.py') 解释:os.system是执行当前的系统命令 1.拿windows系统举例: # 由于ipconfig/all在windows中是查看ip地址 # 所以将此命令运行在os.system中,即可查看系统的ip地址等信息 import os os.system('ipconfig/all') # 因为python file_name.py可以直接执行py文件 # 所以可以通过os.system来执行py代码 import o

  • springboot加载一个properties文件转换为map方式

    目录 加载一个properties文件转换为map 1.创建一个properties文件 2.在java中将该properties文件转换为map properties配置文件出现乱码 加载一个properties文件转换为map springboot中比较常见的获取properties中的值,就是直接在字段上面添加@Value的属性. 但有时候我们不确定key有多少,但是会有一定的规律(这个规律是根据业务来定的,如下),这时候我们就可以考虑将properties中的信息转换为一个map,然后根

随机推荐