欢迎光临

我们一直在努力
当前位置:首页 > 编程技术 >

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

日期:
后台-插件-广告管理-首页/栏目/内容广告位一(PC)
后台-插件-广告管理-首页/栏目/内容广告位一(手机)
目录
  • 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("../python/")
import aaa.a
import bbb.bb.b

关于__init__.py的解释

作用是将文件夹变为一个Python模块,导入包时,事实上javascript是导入了它的__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也会更新[!--empirenews.page--]

如果解释器添加-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直接导入命名空间

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

后台-插件-广告管理-首页/栏目/内容广告位二(PC)
后台-插件-广告管理-首页/栏目/内容广告位二(手机)
后台-插件-广告管理-内容广告位三(PC)
后台-插件-广告管理-内容广告位三(手机)

相关阅读

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

  • 目录python运行或调用另一个py文件或参数1. 运行另一个py文件2. 引用另一个py文件中的变量python调用自己写的py文件python如何调用自己写的py文件呢?如果是不同目录怎么调用
后台-插件-广告管理-内容广告位四(PC)
后台-插件-广告管理-内容广告位四(手机)

热门文章

后台-插件-广告管理-侧边广告位一(PC)
后台-插件-广告管理-侧边广告位一(手机)
  • HTML 表单组件实例代码

  • HTML 表单用于搜集不同类型的用户输入。下文通过代码给大家分享html 表单组件实例代码,感兴趣的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE
  • html2canvas 将html代码转为图片的使用方法

  • 转换代码到图片使用 html2canvas,这是一个非常著名的从浏览器网页截图的开源库,使用很方便,功能也很强大。 使用 html2canvas http:// html2canvas 的使用非常简单,简单
  • HTML网页中插入视频的方法小结

  • 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera、Mozilla、Chrome),支持H.264的(Safari、IE 9、Chrome),都不支持的(IE6、
  • HTML实现文本框只读不能修改其中的内容

  • 废话不多说了,直接给大家贴代码了,具体代码如下所示: <!--方法1:>http:// 当鼠标放不上就离开焦点 --> <input type="text" name="input1" value=http://www.cppcns.com/web
  • 移动端专用的meta标签设置大全

  • 前言 之前学习前端中,对meta标签的了解仅仅只是这一句。 <meta charset="UTF-8"> 但是打开任意的网站,其head标签内都有一列的meta标签。比如我们我们网站,但是自己却很不熟
后台-插件-广告管理-侧边广告位二(PC)
后台-插件-广告管理-侧边广告位二(手机)

最新文章

  • 在Asp.net core项目中使用WebSocket

  • 今天小试了一下在ASP.NET core中使用websocket,这里记录一下: 在 Startup 类的 Configure 方法中添加 WebSocket 中间件。 app.UseWebSockets(); 它也可以传入一些参数 app.Us
  • Vue快速理解事件绑定是什么

  • 目录一、监听事件二、事件修饰符1、stop修饰符阻止事件冒泡2、capture修饰符3、self修饰符4、prevent修饰符5、键盘事件修饰符6、鼠标事件修饰符一、监听事件 监听事件一般
  • C#实现模拟ATM自动取款机功能

  • 目录(1)关于用户帐号的类:Account(2)关于银行数据库的类:BankDatabase(3)关于ATM屏幕显示的类:Screen(4)关于ATM键盘的类:Keypad(5)关于进钞、出钞口的类:DepositSlot(6)关于ATM
  • Java设计模式之抽象工厂模式浅析讲解

  • 1.介绍 当系统准备为用户提供一系列相关对象,又不想让用户代码和这些对象形成耦合时,就可以使用抽象工厂模式。 2.如何实现 1)抽象产品--Car 2)具体产品--BYDCar、TSLCar 3)抽象
  • 如何动态替换Spring容器中的Bean

  • 目录动态替换Spring容器中的Bean原因方案实现Spring中的bean替换问题动态替换Spring容器中的Bean 原因 最近在编写单测时,发现使用 Mock 工具预定义 Service 中方法的行为特
  • C#优雅的实现INotifyPropertyChanged接口

  • INotifyPropertyChanged接口在wpF或WinFrom程序中使用还是经常用到,常用于通知界面属性变更。标准写法如下: class NotifandroidyObject : INotifyPropertyChanged {
后台-插件-广告管理-侧边广告位三(PC)
后台-插件-广告管理-侧边广告位三(手机)